spring中bean的建立

2021-07-07 06:22:49 字數 877 閱讀 5256

問題 1 : bean 的建立時機

bean 是在什麼時候被建立的,有哪些規則?

容器初始化的時候會預先對單例和非延遲載入的物件進行預先初始化。其他的都是延遲載入是在第一次呼叫getbean 的時候被建立。從 defaultlistablebeanfactory 的 preinstantiatesingletons 裡可以看到這個規則的實現。

問題二:bean 的建立過程

對於 bean 的建立過程其實都是通過呼叫工廠的 getbean 方法來完成的。這裡面將會完成對建構函式的選擇、依賴注入等。

無論預先建立還是延遲載入都是呼叫getbean實現,abstractbeanfactory 定義了 getbean 的過程

getbean 的大概過程:

1、先試著從單例快取物件裡獲取。

2、從父容器裡取定義,有則由父容器建立。

3、如果是單例,則走單例物件的建立過程:在 spring 容器裡單例物件和非單例物件的建立過程是一樣的。都會呼叫父類 abstractautowirecapablebeanfactory 的 createbean 方法。 不同的是單例物件只建立一次並且需要快取起來。 defaultlistablebeanfactory 的父類 defaultsingletonbeanregistry 提供了對單例物件快取等支援工作。所以是單例物件的話會呼叫 defaultsingletonbeanregistry 的 getsingleton 方法,它會間接呼叫abstractautowirecapablebeanfactory 的 createbean 方法。

如果是 prototype 多例則直接呼叫父類 abstractautowirecapablebeanfactory 的 createbean 方法。

詳情請參考:

spring容器中的bean建立

springioc spring容器中的bean建立 三種方案 面試題 利用預設的建構函式 利用靜態工廠方法 利用例項工廠方法 建立物件的時機 預設情況下,在spring啟動的時候,建立納入spring容器中所有的bean 在spring容器啟動的時候,可以檢查錯誤 但是如果bean的屬性中有資料,...

spring中bean建立的細節

1 物件建立 單例 多例 scope singleton 預設值,即預設是單例 service dao 工具類 scope prototype 多例 action 物件 2 什麼時候建立?scope prototype 在用到物件的時候,才建立物件。scope singleton 在啟動 容器初始化...

Spring中控制Bean的建立

spring預設情況下,所有的spring bean均是單一的,當在spring中宣告時,有宣告 bean範圍的選項,為了使得每次都能產生乙個新的bean例項,可以給bean填加乙個屬性 scope prototype 利用工廠方法建立bean 這是個設計模式 單例類 設計模式中的單鍵模式 其實就是...