Spring-4-IoC依赖注入

调用流程

  • 预实例化,或者手动getBean,都会进入下述流程
  • AbstractBeanFactory.getBean(String name)
  • AbstractBeanFactory.doGetBean(final String name, final Class<T> requiredType, final Object[] args, boolean typeCheckOnly)
    • 先看cache:Object sharedInstance = getSingleton(beanName),第一次嘛,自然是null
    • 在parent存在,并且自己的beanDefinitionMap不含该beanName时,才让parent来getBean
    • 把beanName塞进Set<String> alreadyCreated
  • 根据beanName拿到RootBeanDefinition
    • RootBeanDefinition mbd = getMergedLocalBeanDefinition(beanName),这里也有一个缓存
  • 利用RootBeanDefinition拿到依赖数组
    • String[] dependsOn = mbd.getDependsOn()
    • 这个和属性注入无关,查看@DependsOn
  • 根据单例,prototype,自定义scope进行处理
  • 利用反射,通过无参构造函数实例化
  • populateBean
    • 属性注入
  • initializeBean

问答

如何保证单例

  • DefaultSingletonBeanRegistry.getSingleton方法中,以singletonObjects作为同步块,并有double check

实例化时什么情况会用cglib

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容