Spring怎麼解決迴圈依賴?

2735云發表於2024-11-23

看了大佬的資料,自己寫一篇,當個筆記。

如有侵權,就會刪除。

目錄:

  • 什麼是迴圈依賴?

  • 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

相關文章