Posted on 2009-07-09 16:37
胡娟 閱讀(713)
評(píng)論(0) 編輯 收藏 所屬分類:
JAVA
Singleton作用域
當(dāng)一個(gè)bean的作用域?yàn)?span lang="EN-US">singleton,那么Spring Ioc容器中只會(huì)存在一個(gè)共享的bean實(shí)例,并且所有對(duì)bean的請(qǐng)求,只要id與該bean定義相匹配,則只會(huì)返回bean的同一實(shí)例。也就是說(shuō),當(dāng)把一個(gè)bean定義設(shè)置為singleton作用域時(shí),Spring IoC容器只會(huì)創(chuàng)建該bean定義的唯一實(shí)例。這個(gè)單一實(shí)例會(huì)被存儲(chǔ)到單例緩存中,并且所有針對(duì)該bean的后續(xù)請(qǐng)求和引用都將返回被緩存的對(duì)象實(shí)例。假如在單個(gè)Spring容器內(nèi)定義了某個(gè)指定class的bean,那么Spring容器將會(huì)創(chuàng)建一個(gè)且僅有一個(gè)由該bean定義知道的類實(shí)例。Singleton作用域是Spring中的缺省作用域。要在XML中將bean定義成singleton。其配置:
<bean id="userDaoImpl" class="com.hujuan.dao.impl.UserDaoImpl" scope="singleton"></bean>
Prototype作用域
Prototype作用域的bean會(huì)導(dǎo)致在每次對(duì)該bean請(qǐng)求(將其注入到另一個(gè)bean中,或者以程序的方式調(diào)用容器的getBean()方法)時(shí)都會(huì)創(chuàng)建一個(gè)新的bean實(shí)例,根據(jù)經(jīng)驗(yàn),對(duì)有狀態(tài)的bean應(yīng)該使用prototype作用域,而對(duì)無(wú)狀態(tài)的bean則應(yīng)該使用singleton作用域,要在XML中將bean定義成prototype,其配置:
<bean id="userDaoImpl" class="com.hujuan.dao.impl.UserDaoImpl" scope="prototype"></bean>
Request
作用域
<bean id="userDaoImpl" class="com.hujuan.dao.impl.UserDaoImpl" scope="request"></bean>
針對(duì)每次Http請(qǐng)求,Spring容器會(huì)根據(jù)userDaoImpl
bean定義創(chuàng)建一個(gè)全新的UserDaoImpl bean實(shí)例,且該userDaoImpl bean實(shí)例僅在當(dāng)前HTTP request內(nèi)有效,因此可以根據(jù)需要放心的更改所建實(shí)例的內(nèi)部狀態(tài),而其他請(qǐng)求中根據(jù)userDaoImpl bean定義創(chuàng)建的實(shí)例,將不會(huì)看到這些特定于某個(gè)請(qǐng)求的狀態(tài)變化。當(dāng)處理結(jié)束,request作用域的bean實(shí)例將銷毀。
Session作用域
<bean id="userDaoImpl" class="com.hujuan.dao.impl.UserDaoImpl" scope="session"></bean>
針對(duì)某個(gè)HTTP session,Spring容器會(huì)根據(jù)userDaoImpl bean定義創(chuàng)建一個(gè)全新的userDaoImpl bean實(shí)例,且該userDaoImpl bean僅在當(dāng)前HTTP Session內(nèi)有效。與request作用域一樣,你可以根據(jù)需要放心的更改所創(chuàng)建實(shí)例的內(nèi)部狀態(tài),而別的HTTP
Session中根據(jù)userDaoImpl創(chuàng)建的實(shí)例,將不會(huì)看到這些特定于某個(gè)HTTP Session的狀態(tài)變化。當(dāng)HTTP Sessison最終被廢棄的時(shí)候,在該HTTP Session作用域內(nèi)的bean也會(huì)被廢棄掉。
global
session作用域
<bean id="userDaoImpl" class="com.hujuan.dao.impl.UserDaoImpl" scope="globalSession"/>
global
session作用域類似于標(biāo)準(zhǔn)的HTTP Session作用域,不過(guò)僅僅在基于portlet的web應(yīng)用中才有意義。Portlet規(guī)范定義了全局Session的概念,它被所有構(gòu)成某個(gè)portlet web應(yīng)用的各種不同的portlet所共享。在global session作用域中定義的bean被限定于全局portlet Session的生命周期范圍內(nèi)。