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