首先三级缓存中
一级缓存保存的是成熟期的bean对象
二级缓存保存的是已经实例化好但是还没完成初始化的
三级缓存存储的是ObjiceFactory 也就是每个bean对象都有自己的ObjectFactory去创建bean
如果没有用到动态代理的话
那么一二级缓存就已经可以解决循环引用了
如果是bean对象有用到动态代理的话
那么这个时候就需要用到三级缓存了
为什么呢
因为动态代理的话每一次访问都会创建新的对象
新的对象地址肯定不同
所以这个时候如果我们直接去访问的话 那么就死循环了
所以三级缓存实际上维护的是一个map集合
map集合里面存储的是动态代理的对象 我们拿到就可以直接用了 这个时候就不会死循环了
总结 如果bean对象是需要动态代理的话 那么就需要用到三级缓存 如果不需要的话 那么其实一二级缓存就可以解决循环引用的问题了