1. 程式人生 > 其它 >白話理解什麼是Spring迴圈依賴

白話理解什麼是Spring迴圈依賴

我們知道Spring IOC是指的容器來負責建立Bean並負責處理Bean之間的依賴關係,比如有如下兩個類A、B:

@Component
public class A
	@Autowired
	private B b;

@Component
public class B

站在容器的角度,發現A依賴B,直接先建立B然後建立A,把B例項賦值給A的成員變數b,完事兒。

但如果是下面一種迴圈依賴的情況,按照上面的邏輯就不行了:

迴圈依賴
@Component
public class A
	@Autowired
	private B b;
	
@Component
public class B
	@Autowired
	private C c;
	
@Component
public class C
	@Autowired
	private A a;

A依賴B、B依賴C、C又依賴A

如果你是容器,尼瑪到底該先建立誰??

解決思路

建立一個類例項之前,先去一個全域性的快取Map裡看下是否有這個類的例項,如果有則說明已經建立過、直接返回,如果沒有則建立。
建立A的例項,加入快取Map,遍歷A的屬性,發現B需要建立,建立B的例項也加入快取,遍歷B的屬性發現需要建立C,建立C的例項,遍歷C的屬性發現需要建立A的例項,但是A例項已經在快取了。迴圈結束。

下面按照上面的思路,寫下程式碼模擬迴圈依賴的解決: