spring bean在初始化的过程中,大致流程如下,后面我们将根据以下的几点来分析和理解源码:
1.转换对应的beanName
2.尝试从缓存中加载单例
3.bean的实例化
4.原型模式的依赖检查
5.检测parentBeanFacotory
6.将存储XML配置文件的GernericBeanDefinition转换为RootBeanDefinition.
7.寻找依赖
8.针对不同的scope进行Bean的创建
9.类型转换
FactoryBean的使用
一般情况,spring通过反射机制利用Bean的class属性指定实现类来实现Bean。
图1缓存中获取单例Bean
单例只会在spring的同一个容器内被创建一次,后续再获取Bean直接从单例缓存中获取。此时会存在循环依赖的情况,程序首先尝试从缓存中加载,然后再次尝试从singletionFactories中加载。如果存在循环依赖,spring创建Bean的原则是不等Bean创建完成就会将创建Bean的objectFactory提早曝光加入到缓存中,一旦下一个Bean创建时需要依赖上一个Bean,则直接使用objectFactory.
网友评论