bean的加载

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

1、转换对应的beanName

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


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

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

3、bea的实例化

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

4、原型模式的依赖检查

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

5、检测parentBeanFactory

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

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

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

7、寻找依赖

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

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


9、类型转换

转换成指定类型