bean的加载过程比bean的解析复杂的多,主要是AbstractBeanFactory下面的doGetBean方法实现

1、转换对应的beanName

传入的参数可能是bean的别名,也可能是FactoryBean,所以需要在这里转换
bean的加载

2、尝试从缓存中加载单例

单例在容器中只会创建一次,后面直接获取bean就行了,首先尝试从缓存中拿,如果不成功就从singletonFactories,因为创建单例存在依赖注入,为了避免循环依赖,在bean没有创建完成时就创建bean的ObjectFactory加到缓存,依赖直接使用ObjectFactory就可以了
bean的加载

3、bea的实例化

从第二步缓存哪里拿到bean的原始状态,需要对bean实例化
bean的加载

4、原型模式的依赖检查

只有在单例才会解决的循环依赖
bean的加载

5、检测parentBeanFactory

如果加载的XML配置文件中不报航beanNane的配置,则需要到parentBeanFactory,然后在递归调用getBean
bean的加载

6、将配置文件的GernericBeanDefinition转换为RootBeanDefinition

xml读取的信息都是存储在GernericBeanDefinition里面,但后面的bean处理都是针对RootBeanDefinition,所以要在这里处理
bean的加载

7、寻找依赖

bean在初始化的过程中很可能用到某些属性,有可能是动态配置的,可能依赖其它的bean,在初始化bean的时候会先初始化依赖的bean
bean的加载

8、针对不同的scope进行bean的创建

bean的加载

9、类型转换

转换成指定类型
bean的加载

相关文章:

  • 2022-01-11
  • 2021-09-19
  • 2021-07-17
  • 2021-06-11
  • 2021-06-13
  • 2022-01-12
  • 2021-05-07
  • 2021-11-06
猜你喜欢
  • 2021-07-26
  • 2021-12-03
  • 2021-07-10
  • 2022-12-23
  • 2021-12-13
  • 2022-12-23
相关资源
相似解决方案