首先為什麼叫明確了?就是因為好多人對於這個到底可以不可以是很模糊的,我也詢問過好多人,都說是不可以的,但是還有一部分人認為是可以的。那麼為什麼會出現這2種截然不同的方式?初步判斷使用方式不同導致的,。最重要回過頭了再說這個問題最重要的原因是之前自己了解過,但是不是很明確,像大家一樣還是模糊的認為可以或者不可以,還有另外乙個很重要的原因,在面試中面試官提到了這個問題,但是面試官也是果斷的說是不可以。導致我很糾結,一定要名曲而這個問題。
首先來構建測試的場景
1.通過2個類相互持有對方,通過構造方法的方式注入,都是預設singleton **如下
package com.slj.test;
import org.springframework.stereotype.component;
@component
public class circlea
public circlea(circleb circleb)
package com.slj.test;
import org.springframework.stereotype.component;
@component
public class circleb
public circleb(circlea circlea)
private circlea circlea;
配置配置檔案
建立測試類
,然後執行結果果斷報錯,和那個面試官的觀點一樣
error creating bean with name 'circlea': requested bean is currently in creation: is there an unresolvable circular reference?
2.通過2個類相互持有對方,通過setter的方式注入,都是預設singleton **做適當的調整就可以
但是這次的結果是可以,而且成功注入了。是不是不可思議?後面我會討論具體原因。
3..通過2個類相互持有對方,通過setter的方式注入,都是prototype**做適當的調整就可以
執行結果報錯:
error creating bean with name 'circlea': requested bean is currently in creation: is there an unresolvable circular reference?
4.通過2個類相互持有對方,通過構造方法的方式注入,都是prototype**做適當的調整就可以
執行結果報錯:
error creating bean with name 'circlea': requested bean is currently in creation: is there an unresolvable circular reference?
那麼我們定下心來分析分析具體原因吧。
1.首先對於第一種情況,通過構造方法來構造,但是bean池中的對方bean 還沒有初始完,所以滅有暴漏出來。故此構造不成功報錯。
2.對於第二種情況,首先通過空構造方法來例項化,例項化後,bean都暴漏出來了。然後通過setter方法來完整這個bean 。
3.對於首先通過空構造方法來例項化,例項化後,是非單例的,
具體的單例非單例的情況還需要繼續討論spring 對於bean的管理。
其中可能有說的不對的地方,希望大家指正,如有幫助請摳1.
關於spring迴圈注入
迴圈注入即a 擁有b 引用 b 擁有a 引用 一 使用xml配置 1.singleton singleton constructor 結果 失敗 2.singleton singleton set方法 結果 成功3.prototype prototype constructor 結果 失敗 4.pr...
Spring中關於Setter方法注入的理解
setter注入 最常用的注入方法,需要在xml配置檔案中進行手動的配置 要求 物件中的每個屬性必須有setter方法 如何配置 需要為物件的每乙個屬性配置乙個property標籤 如何給屬性注入值,需要先確定屬性的型別 1.簡單資料型別 value賦值 2.引用資料型別 ref賦值 3.集合資料型...
spring的迴圈注入,tomcat有時不報錯
spring的註解很方便,resource service 之類的註解很常用。但是 service public class aimpl implements a resource public b b service public class bimpl implements b resource...