Spring解决循环依赖
2020-06-22 11:39:57 0 举报
Spring初始化bean解决循环依赖过程
作者其他创作
大纲/内容
三级缓存返回bean
BeanA创建过程
doCreateBean(beanA)
singletonsCurrentlyInCreation
是
放入二级缓存清除三级缓存并返回bean
返回null
doGetBean(beanB)
getSingleton获取bean
BeanB创建过程
解析BeanB的依赖,实例化BeanA
解析BeanA的依赖,实例化BeanB
getSingleton(beanA)
从一级缓存获取
二级earlySingletonObjects
doGetBean(beanA)
Set<String>存放正在创建bean的名字
有
getBean(beanA)
Spring解决循环依赖过程
返回bean结束
createBeanInstance(beanA)
创建原始BeanA对象,属性没赋值放入三级缓存
createBean(beanA)
BeanA原始对象:BeanA@1234
......过程同A
是否正在创建
BeanB实例化完成
无
把beanA存进去
后续处理
整体流程如下:1、创建BeanA原始对象BeanA:BeanA@1234,此时属性未赋值2、暴露早期引用,将原始对象BeanA放入singletonFactorieser三级缓存3、解析依赖BeanB4、BeanB在实例化BeanA的时候,从三级缓存中获取BeanA的早期引用,BeanB实例化完成5、BeanA实例化完成
三级singletonFactories
一级singletonObjects
从二级缓存获取
从三级缓存获取
返回null结束
getBean(beanB)
否
收藏
0 条评论
下一页