Spring怎么解决循环依赖?

看了大佬的资料,自己写一篇,当个笔记。

如有侵权,就会删除。

目录:

  • 什么是循环依赖?

  • Spring如何解决循环依赖?

1、什么是循环依赖?

简单的来说就是A依赖B的同时,B依赖A。在创建A对象的同时需要使用的B对象,在创建B对象的同时需要使用到A对象。

点击查看代码
@service
public class ServiceImplA {

    public ServiceImplA (){
        System.out.println("A的构造方法执行了...");
    }

    private B b;

    @Autowired
    public void setServiceImplB (B b) {
        this.b = b;
        System.out.println("给A注入B");
    }
}
@service
public class ServiceImplB {

    public ServiceImplB (){
        System.out.println("B的构造方法执行了...");
    }

    private A a;

    @Autowired
    public void setServiceImplB (A a) {
        this.a = a;
        System.out.println("给B注入了A");
    }

}

2、Spring如何解决循环依赖?

步骤:

1、实例化A,生成A的ObjectFactory对象

2、A的ObjectFactory对象存到三级缓存

3、需注入B,但没有B

4、实例化B,生成B的ObjectFactory对象,并且存到三级缓存

5、需要注入A,

6、通A的ObjectFactory对象创建A的代理对象

7、A代理对象存到二级缓存,删除A的ObjectFactory对象

8、A注入B,B执行生命周期,B生成

9、B存到一级缓存,删除B的ObjectFactory对象

10、B注入到A,A执行生命周期,A生成

资料来源:https://www.yuque.com/yp000/osbag7/pqtbqz

posted @ 2024-11-23 12:24  2735云  阅读(22)  评论(0)    收藏  举报