spring如何快速稳定解决循环依赖问题
循环依赖其实就是循环引用,很多地方都说需要两个或则两个以上的bean互相持有对方最终形成闭环才是循环依赖,比如A依赖于B,B依赖于C,C又依赖于A。setter singleton循环依赖使用SingleSetterBeanA依赖SingleSetterBeanB,SingleSetterBeanB依赖SingleSetterBeanA。源码分析spring是通过三级缓存来解决循环依赖的,那么三级缓存是怎么工作的呢?三级缓存对应org.springframework.beans.factory.support.DefaultSingletonBeanRegistry类的三个属性:对于setter注入造成的依赖是通过Spring容器提前暴露刚完成实例化但未完成初始化的bean来完成的,而且只能解决单例作用域的bean循环依赖。使用上面的代码运行时会抛出如下异常:。理论上二级缓存时可行的,只需要将三级缓存中BeanFactory创建的对象提前放入二级缓存中,这样三级缓存就可以移除了。
用户评论