Spring Bean的5種作用域

Spring Bean的5種作用域


singleton作用域:

Spring的scope的默認值是singleton

Spring 只會爲每一個bean創建一個實例,並保持bean的引用.

<bean id="bean的id" class="bean的包名.類名" cope="singleton"/> 或 

<bean id="bean的id" class="bean的包名.類名" singleton="true"/> 

Spring1以上提供


prototype作用域:

每一次請求(將其注入到另一個bean中,或執行getBean()方法)都會產生一個新的bean實例,相當於new操作.

Spring一旦將Bean實例交給(注入)調用者,就不再持有這個bean的引用。就無法再執行bean定義的destroy-method.

清除prototype作用域的bean對象並釋放資源,是調用者的職責。

<bean id="bean的id" class="bean的包名.類名" cope="prototype"/> 或 

<beanid="bean的id" class="bean的包名.類名" singleton="false"/>

Spring1以上提供


request作用域:

表示該針對每一次HTTP請求都會產生一個新的bean,僅適用於WebApplicationContext環境。

<bean id="bean的id" class="bean的包名.類名" scope="request"/>

Spring1以上提供


session作用域:

表示該針對每一次HTTP請求都會產生一個新的bean,僅適用於WebApplicationContext環境。

<bean id="bean的id" class="bean的包名.類名" scope="session"/>

Spring1以上提供


globalSession作用域:

它僅僅在基於portlet的web應用中才有意義。Portlet規範定義了全局Session的概念,它被所有構成某個portlet web應用的各種不同的portlet所共享。在global session作用域中定義的bean被限定於全局portlet Session的生命週期範圍內。如果你在web中使用global session作用域來標識bean,那麼,web會自動當成session類型來使用。

<bean id="bean的id" class="bean的包名.類名" scope="globalSession"/>

Spring1以上提供


Web環境作用域的特殊配置:

使用request作用域、request作用域、globalSession作用域還需要進行額外的配置


在低版本的Web容器中(Servlet2.3以前),需要使用過濾器進行配置

 

Xml代碼

<web-app>
 ... 
<filter> 
	<filter-name>requestContextFilter</filter-name> 
	<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class> </filter> 
<filter-mapping> 
	<filter-name>requestContextFilter</filter-name> 
	<url-pattern>/*</url-pattern>
 </filter-mapping> 
... 
</web-app>

在高版本的Web容器中,可以使用監聽器進行配置

 

Xml代碼

<web-app>
 ... 
<listener> 
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
</listener> 
... 
</web-app>

混合使用作用域的問題:

 

a Bean是Request作用域,它要被一個singleton作用域的b Bean使用(被注入)。還要使用<aop:sclped-proxy/>配置。


<beans xmlns="..."

...

xmlns:aop="....."   要引入aop命名空間

>


<bean id="a" class="A" scope="request">

<aop:sclped-proxy/>

</bean>

 

<bean id="b" class="B" scope="singleton">

<property name="a" ref="a"/>

</bean>


發佈了101 篇原創文章 · 獲贊 14 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章