spring容器能夠順利例項化以建構函式方式注入方式配置的bean有乙個前提:
bean建構函式入參引用的物件必須已經準備就緒。由於這個機制的限制,如果兩個bean都採用建構函式注入,而且都通過建構函式入參引用對方,就會發生類似於執行緒死鎖的迴圈問題。
public class
car}
public class
boss
}
假設在spring配置檔案中按照一下進行配置
"car"
class
="com.smart.cons.car"
>
<
!-- 通過構造方法設定屬性值 --
>
"0" value=「紅旗」 />
"1" ref=「boss」 />
<
/bean>
"boss"
class
="com.smart.cons.boss"
>
"0" value=「john」 />
"1" ref=「car」 />
<
/bean>
當啟動spring ioc容器時,因為存在迴圈依賴問題。spring容器將無法啟動。解決這個問題只需要修改bean**,將建構函式輸入方式調整為屬性注入方式。
不要使用基於建構函式的依賴注入,可以通過以下方式解決:1.在字段上使用@autowired註解,讓spring決定在合適的時機注入
2.用基於setter方法的依賴注入。
Spring 迴圈依賴問題
a class com.demo.circularreference.a name b ref b bean b class com.demo.circularreference.b name a ref a bean public classa public class b spring中將迴圈依...
spring迴圈依賴問題
在開始介紹各種情況之前,首先要了解以下三個知識點 spring中依賴注入的方式有兩種,屬性注入與構造器注入。上面的 中,類a就是通過屬性注入的方式注入了b,類b是通過構造器注入的方式注入了a。spring中的bean根據作用域的不同,可以大體分為兩類,singleton和prototype。sing...
Spring迴圈依賴問題(筆記)
a類中有成員變數b類的物件。b類中也有成員變數a類的物件。簡單來說就,就是如下情況 class a class b 在一開始的開始 也就是程式第一次獲取a的例項時,需要從spring容器單例池中獲取。但此時單例池中還沒有a的例項,所以要new 乙個a物件。在a例項 建立和初始化的時候,要獲取成員變數...