什麼是循環依賴?Spring是如何解決循環依賴這個問題的?

什麼是循環依賴?

其實就是循環引用,也就是兩個或則兩個以上的bean互相持有對方,最終形成閉環。比如A依賴於B,B依賴於C,C又依賴於A。

怎麼產生的?

Spring的單例對象的初始化主要分爲三步:

(1)createBeanInstance:實例化,其實也就是調用對象的構造方法實例化對象

(2)populateBean:填充屬性,這一步主要是多bean的依賴屬性進行填充

(3)initializeBean:調用spring xml中的init 方法。

從上面講述的單例bean初始化步驟我們可以知道,循環依賴主要發生在第一、第二步。

也就是構造器循環依賴和field循環依賴。
 

Spring中循環依賴場景有

(1)構造器的循環依賴

(2)field屬性的循環依賴。

怎麼檢測是否存在循環依賴

檢測循環依賴相對比較容易,Bean在創建的時候可以給該Bean打標,如果遞歸調用回來發現正在創建中的話,即說明了循環依賴了。

Spring爲了解決單例的循環依賴問題,使用了三級緩存

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章