淺談Spring中Bean的作用域、生命周期
本文主要探究的是關(guān)于Bean的作用域、生命周期的相關(guān)內(nèi)容,具體如下。
Bean的作用域
Spring 3中為Bean定義了5中作用域,分別為singleton(單例)、prototype(原型)、request、session和global session,5種作用域說明如下:
1.singleton:單例模式,Spring IoC容器中只會存在一個共享的Bean實(shí)例,無論有多少個Bean引用它,始終指向同一對象。Singleton作用域是Spring中的缺省作用域,也可以顯示的將Bean定義為singleton模式,配置為:
<bean id="userDao" class="com.ioc.UserDaoImpl" scope="singleton"/>
2.prototype:原型模式,每次通過Spring容器獲取prototype定義的bean時,容器都將創(chuàng)建一個新的Bean實(shí)例,每個Bean實(shí)例都有自己的屬性和狀態(tài),而singleton全局只有一個對象。根據(jù)經(jīng)驗(yàn),對有狀態(tài)的bean使用prototype作用域,而對無狀態(tài)的bean使用singleton作用域。
3.request:在一次Http請求中,容器會返回該Bean的同一實(shí)例。而對不同的Http請求則會產(chǎn)生新的Bean,而且該bean僅在當(dāng)前Http Request內(nèi)有效。
<bean id="loginAction" class="com.cnblogs.Login" scope="request"/>
,針對每一次Http請求,Spring容器根據(jù)該bean的定義創(chuàng)建一個全新的實(shí)例,且該實(shí)例僅在當(dāng)前Http請求內(nèi)有效,而其它請求無法看到當(dāng)前請求中狀態(tài)的變化,當(dāng)當(dāng)前Http請求結(jié)束,該bean實(shí)例也將會被銷毀。
4.session:在一次Http Session中,容器會返回該Bean的同一實(shí)例。而對不同的Session請求則會創(chuàng)建新的實(shí)例,該bean實(shí)例僅在當(dāng)前Session內(nèi)有效。
<bean id="userPreference" class="com.ioc.UserPreference" scope="session"/>
,同Http請求相同,每一次session請求創(chuàng)建新的實(shí)例,而不同的實(shí)例之間不共享屬性,且實(shí)例僅在自己的session請求內(nèi)有效,請求結(jié)束,則實(shí)例將被銷毀。
5.global Session:在一個全局的Http Session中,容器會返回該Bean的同一個實(shí)例,僅在使用portlet context時有效。
Bean的生命周期
經(jīng)過如上對Bean作用域的介紹,接下來將在Bean作用域的基礎(chǔ)上講解Bean的生命周期。
Spring容器可以管理singleton作用域下Bean的生命周期,在此作用域下,Spring能夠精確地知道Bean何時被創(chuàng)建,何時初始化完成,以及何時被銷毀。而對于prototype作用域的Bean,Spring只負(fù)責(zé)創(chuàng)建,當(dāng)容器創(chuàng)建了Bean的實(shí)例后,Bean的實(shí)例就交給了客戶端的代碼管理,Spring容器將不再跟蹤其生命周期,并且不會管理那些被配置成prototype作用域的Bean的生命周期。Spring中Bean的生命周期的執(zhí)行是一個很復(fù)雜的過程,讀者可以利用Spring提供的方法來定制Bean的創(chuàng)建過程。Spring容器在保證一個bean實(shí)例能夠使用之前會做很多工作:
總結(jié)
以上就是本文關(guān)于淺談Spring中Bean的作用域、生命周期的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
- 詳解Spring中Bean的生命周期和作用域及實(shí)現(xiàn)方式
- Spring實(shí)戰(zhàn)之Bean的作用域request用法分析
- Spring實(shí)戰(zhàn)之Bean的作用域singleton和prototype用法分析
- 深入了解Spring中Bean的作用域和生命周期
- spring ioc的簡單實(shí)例及bean的作用域?qū)傩越馕?/a>
- JSP 中Spring Bean 的作用域詳解
- 簡單了解spring bean作用域?qū)傩詓ingleton和prototype的區(qū)別
- Spring中Bean的作用域與生命周期詳解
- 詳解Spring中Bean的作用域與生命周期
- Spring?框架中的?Bean?作用域(Scope)使用詳解
相關(guān)文章
mybatis配置文件簡介_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了mybatis配置文件簡介的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09解決idea npm:無法將“npm”項(xiàng)識別為cmdlet、函數(shù)、腳本文件或可運(yùn)行程序的名稱問題
在IDEA中運(yùn)行npm命令時出現(xiàn)無法識別的錯誤,通常是由于npm環(huán)境變量配置不正確引起,解決方法包括以管理員身份運(yùn)行IDEA,確認(rèn)node和npm是否正確安裝及配置環(huán)境變量,需要在系統(tǒng)環(huán)境變量中添加node.js的安裝路徑,并設(shè)置npm的全局模塊和緩存路徑2024-10-10利用SpringBoot和LiteFlow解鎖復(fù)雜流程
隨著業(yè)務(wù)的復(fù)雜化,企業(yè)需要更加高效、便捷地管理自己的業(yè)務(wù)流程,這就需要借助一些流程引擎實(shí)現(xiàn),今天,我們就來介紹一種基于Java語言開發(fā)的輕量級工作流引擎——LiteFlow,以及如何在Spring Boot框架中集成它,從而提高企業(yè)的工作效率和開發(fā)效率2023-06-06POI讀取excel簡介_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了POI讀取excel簡介,詳細(xì)的介紹了什么是Apache POI和組件,有興趣的可以了解了解一下2017-08-08