spring對bean物件的管理細節

2021-10-14 15:14:56 字數 1918 閱讀 8394

在spring配置檔案中使用bean標籤,配以id和class屬性後,且沒有其他屬性和標籤時。採用的就是預設構造建立bean物件,此時如果類中沒有預設建構函式,則物件無法建立

就像這樣

如果我們的要建立的bean物件的預設建構函式沒有的時候,

我們在使用這種方式建立bean物件的話就會出現無法被例項化的錯誤,這就是由於沒有預設構造導致的

假設我們在使用jar包的時候,它裡面有乙個工廠類,工廠類中包含能建立我們需要的物件的方法,例如

假設這就是哪個工廠類,getaccountservice就是能獲得我們想要的物件的方法,那我們如何使用配置檔案來進行配置,才能獲得我們的bean物件呢?

假設如下時含有建立物件的靜態方法的工廠類

那麼如果我們想要建立bean物件的話,配置檔案中應該這樣配置:

我們可以看到,通過核心容器中獲取到的物件,都是單例的

,那如果我們想使用多例的物件的時候,該怎麼辦呢?

bean標籤中有個scope屬性,該屬性用於指定bean的作用範圍,他的取值分別為singleton、prototype、request、session、global-session

singleton:表示的就是單例的(不寫預設就是這個)

prototype:表示多例的

request:表示作用於web應用的請求範圍

session:表示作用於web應用的會話範圍

global-session:表示作用域集群環境的會話範圍(也叫做全域性會話範圍),當不是集群環境時它就是session

當我們的scope屬性設定為prototype時

我們再次執行發現的到的就是兩個物件了

首先我們需要區分是單例物件還是多例物件,因為他們兩個的宣告週期並不相同

舉例示範

我們要建立的物件的類如下

為了演示效果,我們在執行初始化語句的時候控制台列印輸出「物件初始化成功」,在物件被銷毀的時候執行銷毀方法然後控制台列印輸出「物件銷毀成功!」,配置檔案中的bean物件配置如下

測試方法如下

得到的結果就是這樣的

我們可以清晰的看到,當建立容器的時候,物件就會被初始化,當容器關閉的時候物件也銷毀

但是當我們把scope屬性設定為多例物件的話

再次執行相同的測試方法

我們發現,在容器關閉後,並沒有銷毀物件

,那是因為生命週期不同,多例物件的生命週期如下

Spring容器對Bean的管理

spring容器對bean的管理 1 bean物件建立的時機 預設是隨著容器建立,可以使用lazy init true 在呼叫getbean建立 延遲建立 也可以用批量延遲建立 2 bean物件的建立模式 預設是單例,可以使用scope屬性改變。singleton 單例,每次呼叫getbean返回同...

spring對bean的管理細節

1.建立bean的建立方式 1 使用預設建構函式構造 在配置檔案中使用bean標籤,配以id和class屬性,且沒有其他屬性和標籤時,採用的就是預設建構函式建立bean物件,如果此類中沒有預設建構函式,則建立失敗.2 使用普通工廠中的方法建立物件 使用某個類中的方法建立物件,並存入ioc容器中 先配...

Spring對Bean裝配過程

color red spring裝配bean的過程 color 1.例項化 2.設定屬性值 3.如果實現了beannameaware介面,呼叫setbeanname設定bean的id或者name 4.如果實現beanfactoryaware介面,呼叫setbeanfactory 設定beanfact...