Spring的迴圈依賴

2021-10-06 13:51:18 字數 918 閱讀 9458

面試官經常會問:spring的兩個bean可以迴圈依賴嗎?

答:spring預設單例支援迴圈依賴

我們首先在乙個spring專案裡面準備兩個bean,讓它們互相依賴注入:

然後如圖建立乙個配置類,用來掃瞄bean

@componentscan

("com.zyc"

)public

class

最後建立乙個test類:

public

class

test

}

檢視控制台輸出:

spring容器初始化時,通過配置類掃瞄到這兩個bean,完成其依賴注入,觸發了它們的構造器方法,列印日誌。

然後通過getbean獲取indexservice執行getuserservice()方法,該方法呼叫了userservice,並呼叫其getindexservice()方法,這個方法反過來又呼叫了indexservice。輸出日誌正確,所以它們是迴圈依賴的。

spring 迴圈依賴

構造器依賴無法解決,使用 快取解決field屬性依賴。a的屬性依賴b,b的屬性依賴a 建立a,設定依賴屬性b,發現b沒有建立,建立b,設定依賴屬性a,先從一級快取singletonobjects中去獲取。如果獲取到就直接return 如果獲取不到或者物件正在建立中 issingletoncurren...

spring迴圈依賴

關於spring迴圈依賴網上有太多的例子,本文只是簡單的記錄一下。本文預設讀者熟悉spring核心之一控制反轉和依賴注入 在我們的開發過程中,我們基本上對迴圈依賴是無感且不用去考慮如何解決。如上圖中classa使用屬性注入了classb,classb使用屬性注入了classa。如上圖這就是產生了迴圈...

Spring 中的迴圈依賴

a 例項依賴 b 例項,b 例項依賴 c 例項,c 例項依賴 a 例項,依賴關係形成乙個環,就稱為迴圈依賴。prototype 作用域的迴圈依賴 迴圈依賴是對於單例來說的,spring 容器對於 prototype 作用域的 bean 不進行快取,因此無法完成依賴注入。構造器迴圈依賴 單例 始終都在...