Spring Bean的作用域和生命週期

2021-08-19 18:40:11 字數 2270 閱讀 4933

1. spring bean的作用域

bean有5種作用域:singleton(單例)、prototype(原型)、request、session和global session。

① singleton:單例模式,spring ioc容器中只會存在乙個共享的bean例項,無論有多少個bean引用它,始終指向同一物件。singleton作用域是spring中預設作用域,也可以顯式的將bean定義為singleton模式。

id="helloworld"

class="com.test.helloworld"

scope="singleton">

bean>

② prototype:原型模式,每次通過spring容器獲取prototype定義的bean時,容器都將建立乙個新的bean例項,每個bean例項都有自己的屬性和狀態,而singleton全域性只有乙個物件。對有狀態的bean使用prototype作用域,對無狀態的bean使用singleton作用域。

③ request:在一次http請求中,容器會返回該bean的同一例項。而對不同的http請求則會產生新的bean,且該bean僅在當前http request內有效。

helloworld" class="com.test.helloworld" scope="request"/>,針對每一次http請求,spring容器根據該bean的定義建立乙個全新的例項,且該例項僅在當前http請求內有效,而其它請求無法看到當前請求中狀態的變化,當當前http請求結束,該bean例項也將會被銷毀。

④ session:在一次http session中,容器會返回該bean的同一例項。而對不同的session請求則會建立新的bean例項,該bean例項僅在當前session內有效。

helloworld" class="com.test.

helloworld

" scope="session"/>,同http請求相同,每一次session請求建立新的例項,而不同的例項之間不共享屬性,且例項僅在自己的session請求內有效,請求結束,則例項將被銷毀。

⑤ global session:在乙個全域性的http session中,容器會返回該bean的同一例項,僅在使用portletcontext時有效。

2. bean的生命週期

1. 例項化乙個bean;

2. 按照spring上下文對例項化的bean進行配置,也就是ioc注入;

3. 如果這個bean實現了beannameaware介面,會呼叫它實現的setbeanname(string beanid)方法,此處傳遞的是spring配置檔案中bean的id

4. 如果這個bean實現了beanfactoryaware介面,會呼叫它實現的setbeanfactory(),傳遞的是spring工廠本身(可以用這個方法獲取到其他bean)

6. 如果這個bean關聯了beanpostprocessor介面,將會呼叫postprocessbeforeinitialization(object obj, string s)方法,beanpostprocessor經常被用作是bean內容的更改,並且由於這個是在bean初始化結束時呼叫after方法,也可用於記憶體或快取技術

7. 如果這個bean在spring配置檔案中配置了init-method屬性會自動呼叫其配置的初始化方法

8. 如果這個bean關聯了beanpostprocessor介面,將會呼叫postafterinitialization(object obj, string s)方法

注意:以上工作完成以後就可以用這個bean了,那這個bean是乙個single的,所以一般情況下我們呼叫同乙個id的bean會是在內容位址相同的例項

9. 當bean不再需要時,會經過清理階段,如果bean實現了disposablebean介面,會呼叫其實現的destroy方法

10. 最後,如果這個bean的spring配置中配置了destroy-method屬性,會自動呼叫其配置的銷毀方法

spring容器可以管理singleton作用域下bean的生命週期,在此作用域下,spring能夠精確地知道bean何時被建立,何時初始化完成,以及何時被銷毀。而對於prototype作用域的bean,spring只負責建立,當容器建立了bean的例項後,bean的例項就交給了客戶端的**管理,spring容器將不再跟蹤其生命週期,並且不會管理那些被配置成prototype作用域的bean的生命週期。

Spring Bean的作用域

bean的作用域,常用的有兩種,單例singleton 多例prototype 預設情況下,bean都是單例的singleton。在容器初始化的時候就被建立,就這麼乙份。1 單例模式 例如 測試 package com.lynn.spring.test import static org.junit...

Spring bean的作用域

spring框架中,bean 的作用域有如下五種 1.單例 每個spring的ioc容器返回來乙個bean例項 框架預設 2.原型 當每次請求時候都返回來乙個bean例項 3.請求 每個http請求返回來乙個bean例項 4.會話 每個http會話返回來乙個bean例項 5.全域性會話 返回全域性會...

Spring Bean的作用域

在xml檔案中配置bean時,我們可以通過scope為bean配置指定的作用域。bean的作用域分為五種 說明 singleton 單例模式,乙個bean容器中只存在乙個bean例項 prototype 原型模式,每次請求都會產生乙個新的bean例項 request 每次http請求會產生乙個新的b...