spring迴圈依賴

2021-10-17 09:03:03 字數 873 閱讀 3507

關於spring迴圈依賴網上有太多的例子,本文只是簡單的記錄一下。本文預設讀者熟悉spring核心之一控制反轉和依賴注入

在我們的開發過程中,我們基本上對迴圈依賴是無感且不用去考慮如何解決。如上圖中classa使用屬性注入了classb,classb使用屬性注入了classa。如上圖這就是產生了迴圈依賴,但是如果我們這樣啟動專案是能啟動成功的。這是因為spring已經幫我們解決了部分產生迴圈依賴的問題。

首先**一下spring載入bean流程

解決spring迴圈依賴很重要的乙個思想就是乙個中間態

spring的**快取解決迴圈依賴的問題

spring在預設情況下會對建立bean進行自然排序,所以在預設情況下a會有限建立

依賴情況

依賴注入方式

是否解決

類a和類b互相依賴

互相採用setter注入

是類a和類b互相依賴

互相採用構造器注入

否類a和類b互相依賴

類a採用setter注入類b,類b採用構造器注入類a

是類a和類b互相依賴

類a採用構造器注入類b,類b採用setter注入類a

spring 迴圈依賴

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

spring避免迴圈依賴

spring避免迴圈依賴 參見數 spring原始碼深度解析 第98頁 什麼是迴圈依賴,例如a引用b,b引用c,c引用a。1.如果通過構造器注入構成的迴圈依賴,這種情況下是沒有辦法解決的。例如如下配置 2.通過setter注入方式構成的迴圈依賴,只能解決單例作用域的bean迴圈依賴。通過提前暴露乙個...

Spring處理迴圈依賴

什麼是迴圈依賴?a類注入b b注入c c注入a 形成了乙個依賴環 直接上spring原始碼 boolean earlysingletonexposure mbd.issingleton this allowcircularreferences issingletoncurrentlyincreati...