本文主要探究的是關(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剑琒pring 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ì)被銷(xiāo)毀。
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í)例將被銷(xiāo)毀。
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í)被銷(xiāo)毀。而對(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)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
原文鏈接:https://www.cnblogs.com/zhanglei93/p/6231882.html