看了大佬的資料,自己寫一篇,當個筆記。
如有侵權,就會刪除。
目錄:
-
什麼是迴圈依賴?
-
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