從單例集合中獲取目標bean《3》

2021-10-08 17:23:54 字數 1032 閱讀 2891

*

從單例集合中獲取目標 bean

容器首先從單例物件集合中獲取 bean 例項,我們都知道單例物件在容器中只會存在乙份,所以首先檢查單例集合也符合常理,

獲取單例物件的方法如下:

public object getsingleton(string beanname)

上述方法第二個引數設定為 true,,

表示允許對 bean 的早期依賴,

spring 中 bean 的依賴關係由開發者控制,

具備極大的自由配置空間,如果配置不當,

可能會導致迴圈依賴的場景,

即 a 依賴於 b,而 b 又依賴於 a,當初始化 a 的時候,檢測到引用的 b

還沒有例項化,就會轉去例項 b,例項化 b 的過程中又會發現 a 還沒有例項化完成,

從而又回來例項化 a,因此陷入死鎖。而 allowearlyreference 則會提前** bean 的建立過程,

//建立bean的過程

protected object getsingleton(string beanname, boolean allowearlyreference) }}

}return (singletonobject != null_object ? singletonobject : null);

}上述方法的邏輯是首先從存放 bean 例項的集合 singletonobjects 中獲取例項,如果例項不存在且正在建立中,則嘗試從 earlysingletonobjects 中獲取正在建立中的 bean 例項,如果仍然不存在並且允許早期依賴,則將 objectfactory 提前**。

singletonobjects 和 earlysingletonobjects 的區別

兩者都是以 beanname 為 key,bean 例項為 value 進行儲存,區別在於 singletonobjects 儲存的是例項化完成的 bean 例項,而 earlysingletonobjects 儲存的是正在例項化中的 bean,所以兩個集合的內容是互斥的。

*/

Spring中Bean的單例和多例

在spring中,bean可以被定義為兩種模式 prototype 多例 和singleton 單例 singleton 單例 只有乙個共享的例項存在,所有對這個bean的請求都會返回這個唯一的例項。prototype 多例 對這個bean的每次請求都會建立乙個新的bean例項,類似於new。spr...

在單例Bean中依賴原型Bean問題解決

第一步 建立乙個單例bean。package com.tech.scope import org.springframework.beans.factory.annotation.autowired import org.springframework.beans.factory.config.co...

spring中的bean預設是單例模式

餓漢模式 spring singleton的預設是餓漢模式 啟動容器時 即例項化容器時 為所有spring配置檔案中定義的bean都生成乙個例項 懶漢模式 在第乙個請求時才生成乙個例項,以後的請求都呼叫這個例項 spring singleton設定為懶漢模式 二 另一種和singleton對應的sc...