Spring中的循环引用问题

58 阅读1分钟

循环依赖:循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。比如A依赖B,B依赖A

循环依赖在Spring中是允许存在的,Spring框架依据三级缓存已经解决了大部分的循环依赖

1、一级缓存:单例池,缓存已经经理了完整的生命周期,已经初始化完成的bean对象

2、二级缓存:缓存早期bean对象(生命周期还没有走完)

3、三级缓存:缓存的是ObjectFactory,表示对象工厂,用来创建某个对象的

构造方法出现了循环依赖怎么解决:

原因:由于bean的生命周期中构造函数是第一个执行的,Spring框架并不能解决构造函数的依赖注入

解决方案:使用@Lazy进行懒加载,什么时候需要对象在进行bean对象的创建

public A(@Lazy B b) {
    System.out.println("A的构造方法执行了...");
    this.b = b;
}