spring boot是如何解决单例模式下setter注入循环依赖的的

发布时间 2023-08-29 10:48:08作者: 啥123

 当A的属性中有B类,B的属性中有C类,C的属性中有A类,在创建A实例对象时发现需要实例化B,实例化B的时候发现要实例化C,实例化C的时候又发现要实例化A,这样就出现了循环依赖的问题,导致spring框架不能完成这三个类的实例化。

在单例模式setter注入的情况下,spring框架可以使用三级缓存机制解决这个问题。

在实例化A的时候,现在一级缓存中找有没有这个对象,如果没有就去二级缓存中找,二级缓存中也没有就会会先创建一个和bean同名的单例工厂,并将bean先放入到单例工厂中。将正在创建bean的单例工厂放在三级缓存中,保证在循环依赖查找的时候可以找到bean的引用,然后将创建出的bean的引用放在二级缓存中,提前暴露自己的引用。