Spring循环依赖
2021-12-22 16:24:44 9 举报
Spring循环依赖,使用三级缓存解决
作者其他创作
大纲/内容
afterSingletonCreation
getSingleton
populateBean
A、B
A
B
singletonFactory.getObject() -> createBean
从缓存中获取
一级缓存
二级缓存
三级缓存
正在创建的bean中移除该bean
private B b;
在BeanFactory情况下,getBean方法触发Bean对象创建
beanFactory.getBean(A.class)
暴露对象引用到三级缓存
第二次从三级缓存获取到,移除三级缓存,添加到二级缓存
singletonsCurrentlyInCreation,标记bean正在创建中
applyPropertyValues
此时对象实例化已经完成,返回一个A对象,其中的所有属性均为null
不存在
循环依赖
doGetBean
private A a;
查询缓存均不存在的情况,开始创建
resolveValueIfNecessary
装配Bean中的属性
getSingleton方法中singletonFactory.getObject()调用create
存在
beforeSingletonCreation
此时,该Bean已创建完成,将该Bean放到一级缓存(singletonObjects)中,并从二级,三级缓存中移除
createBeanInstance
resolveReference
依赖查找,此时查找Bean B
doCreateBean
0 条评论
下一页