Loading

Spring bean循环依赖

Spring循环引用

循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。
比如A依赖于B,B依赖于A。循环依赖在spring中是允许存在,spring框架依据三级缓存已经解决了大部分的循环依赖。

  • 一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的bean对象。
  • 二级缓存:缓存早期的bean对象(生命周期还没走完)。
  • 三级缓存:缓存的是ObjectFactory,表示对象工厂,用来创建某个对象的。
    三级缓存解决循环依赖

构造方法循环依赖

A依赖于B,B依赖于A,注入的方式是构造函数。
原因:由于bean的生命周期中构造函数是第一个执行的,spring框架并不能解决构造函数的的依赖注入。
解决:使用@Lazy进行懒加载,什么时候需要对象再进行bean对象的创建。

public class A {
    private B b;

    public A(@Lazy B b) {
        System.out.println("A的构造方法执行了.....");
        this.b = b;
    }
}
posted @ 2024-05-11 17:58  worshipone  阅读(32)  评论(0)    收藏  举报