Spring源码循环依赖
2021-04-06 07:12:22 0 举报
Spring源码执行流程
作者其他创作
大纲/内容
doGetBean(beanB....)
尝试从各级缓存中获取bean
getSingleton(beanA,singletonFactory)
initializeBean(beanB....)
返回 beanA 的原始对象
doGetBean(bean A....)
最后完成beanA的初始化
addSingleton(beanB,singletonFactory)
由于第一步添加了缓存所以这里不为空,并将三级缓存移动到二级
属性注入
addSingletonFactory(beanA,singletonFacotry)
getObjectForBeanInstance(.....)
beanB 获取 beanA的早期引用
createBean(beanB,mdb,args)
doCreateBean(beanB.....);
createBean(beanA,mdb,args)
getBean(beanA....)
beanB 完成初始化和实例化
初始化bean
doCreateBean(beanA.....);
添加到三级缓存
getSingleton(beanB) == Null
doGetBean(beanA....)
populateBean(beanA....)
getSingleton(beanA) == Null
getSingleton(beanB,singletonFactory)
createBeanInstance(beanB....)
getBean(beanA)
addSingletonFactory(beanB,singletonFacotry)
创建bean对象
populateBean(beanB....)
addSingleton(beanA,singletonFactory)
getBean(beanB)
先创建 beanA
getSingleton(beanA)
initializeBean(beanA....)
收藏
收藏
0 条评论
下一页