在<bean>中有一個scope屬性,它分別有五個值可選
singleto
當一個bean的作用域為singleton, 那么Spring IoC容器中只會存在一個共享的bean實例支示,并且所有對bean的請求呻畸,只要id與該bean定義相匹配,則只會返回bean的同一實例悼院。prototype
一個bean定義對應多個對象實例伤为。Prototype作用域的bean會導致在每次對該bean請求(將其注入到另一個bean中,或者以程序的方式調用容器的getBean()方法)時都會創(chuàng)建一個新的bean實例据途。根據(jù)經(jīng)驗绞愚,對有狀態(tài)的bean應該使用prototype作用域,而對無狀態(tài)的bean則應該使用singleton作用域颖医。request
在一次HTTP請求中位衩,一個bean定義對應一個實例;即每次HTTP請求將會有各自的bean實例熔萧, 它們依據(jù)某個bean定義創(chuàng)建而成糖驴。該作用域僅在基于web的Spring ApplicationContext情形下有效。
考慮下面bean定義:
<bean id="loginAction" class=cn.csdn.LoginAction" scope="request"/>
針對每次HTTP請求佛致,Spring容器會根據(jù)loginAction bean定義創(chuàng)建一個全新的LoginAction bean實例贮缕, 且該loginAction bean實例僅在當前HTTP request內有效,因此可以根據(jù)需要放心的更改所建實例的內部狀態(tài)俺榆, 而其他請求中根據(jù)loginAction bean定義創(chuàng)建的實例感昼,將不會看到這些特定于某個請求的狀態(tài)變化。 當處理請求結束罐脊,request作用域的bean實例將被銷毀定嗓。session
在一個HTTP Session中,一個bean定義對應一個實例萍桌。該作用域僅在基于web的Spring ApplicationContext情形下有效宵溅。
考慮下面bean定義:
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>
針對某個HTTP Session,Spring容器會根據(jù)userPreferences bean定義創(chuàng)建一個全新的userPreferences bean實例上炎, 且該userPreferences bean僅在當前HTTP Session內有效恃逻。 與request作用域一樣,你可以根據(jù)需要放心的更改所創(chuàng)建實例的內部狀態(tài),而別的HTTP Session中根據(jù)userPreferences創(chuàng)建的實例辛块, 將不會看到這些特定于某個HTTP Session的狀態(tài)變化。 當HTTP Session最終被廢棄的時候铅碍,在該HTTP Session作用域內的bean也會被廢棄掉润绵。global session
在一個全局的HTTP Session中,一個bean定義對應一個實例胞谈。典型情況下尘盼,僅在使用portlet context的時候有效。該作用域僅在基于web的Spring ApplicationContext情形下有效烦绳。
考慮下面bean定義:
<bean id="userPreferences" class="com.foo.UserPreferences" scope="globalSession"/>
global session作用域類似于標準的HTTP Session作用域卿捎,不過它僅僅在基于portlet的web應用中才有意義。Portlet規(guī)范定義了全局Session的概念径密,它被所有構成某個portlet web應用的各種不同的portlet所共享午阵。在global session作用域中定義的bean被限定于全局portlet Session的生命周期范圍內。