Spring迴圈依賴深度理解

2021-10-20 18:07:34 字數 558 閱讀 6495

並非所有的建構函式依賴都不可以被解決,而是必須要保證先初始化的bean可以正常的被例項化,因為先初始化的bean需要從**快取中公升級到二級快取,也就是說先初始化的類中不可以通過建構函式注入的方式去注入迴圈依賴的bean

二級快取的作用:如果多個類同時迴圈依賴同乙個類,那麼我們需要保證獲取到的例項化物件是一樣的,如果沒有二級快取,都從**快取中去獲取,那麼獲取到的都是乙個factory,通過fatory「生產」出來的bean可能是不同的

**快取中為什麼不直接儲存例項,而是使用乙個objectfactory?為了方便我們在需要對例項進行增強。

非單例的迴圈依賴注入,容器啟動不會報錯,因為只有非抽象、單例 並且非懶載入的類才能被提前初始bean。

因為迴圈依賴中先執行例項化的bean會從**快取中公升級到二級快取,所以如果這個bean使用了入@async這種動態**時,在初始化之後進行檢查**物件和二級環快取中是否一致時,會發現不一致而報錯,解決方法:

使用@lazy註解,延遲載入

使用@dependson註解,指定載入先後關係

修改檔名稱,改變迴圈依賴類的載入順序

參考原文:

spring迴圈依賴深入理解

例項a 例項b 例項c 例項a。例項間的依賴構成閉環。spring 預設是支援迴圈依賴的 setter public abstractautowirecapablebeanfactory 迴圈依賴分為三種 構造器迴圈依賴 setter迴圈依賴 多例迴圈依賴 其中第一種和第三種是直接報錯的,sprin...

spring 迴圈依賴

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

spring迴圈依賴

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