循环依赖问题中的三级缓存
2022-06-13 14:37:53 4 举报
spring三级缓存问题
作者其他创作
大纲/内容
找到
三级缓存
创建B对象
二级缓存
函数式接口
A-B
从容器中找A
匿名内部类或者lambda表达式当作参数传入调用的时候通过getObject方法调用
初始化A对象给b属性赋值
createBeanInstance
ObjectFactory
populateBean
整个过程为递归方式不断调用
从容器中查找B对象
找到-此时肯定能找到
没找到
提前暴露-赋值:将A 半对象赋值给Bean B如下:class B{private A a;//a=null,半对象}
end
找到并加入缓存map缓存1.A 半对象2.B 半对象3.B 成品4. A 成品
map缓存1.A 半对象
一级缓存
createBean
map缓存1.A 半对象2.B 半对象3.B 成品
为什么不是只有两级缓存?所以如果没有AOP的话确实可以两级缓存就可以解决循环依赖的问题,如果加上AOP,两级缓存是无法解决的,不可能每次执行singleFactory.getObject()方法都给我产生一个新的代理对象,所以还要借助另外一个缓存来保存产生的代理对象
实例化A对象b=null
map缓存1.A 半对象2.B 半对象
实例化B对象a=null
getBean
class A{private B b;}class B{private A a;}
doCreateBean
直接赋值即可
回到A去寻找B对象
初始化B给a属性赋值
doGetBean
创建对象
0 条评论
下一页