request 、 session 和 globalsession 三種作用域僅在基於 Web 的應用中使用

Bean的singleton、prototype、request 、 session 和 globalsession五種作用域中,request 、 session 和 globalsession三種作用域僅在基於 Web 的應用中使用。

一般在 <bean> 標籤中通過 scope 指定作用域類型,也可以在 <beans> 下指定默認全局的 scope 類型。

其中 Singleton 與 Prototype 類型的區別在於:Prototype 在交給用戶後,IOC 容器不在具有管理權限,即放棄對該 bean 的生命週期管理。而 IOC 容器則會對 Singleton 進行完整的生命週期管理;Singleton 默認採用非延遲初始化,也可通過設置 lazy-init 屬性改變初始化方式,但是 prototype 只能採用延遲初始化方式。</beans></bean>

Request作用域

考慮下面bean定義:

<bean id="loginAction" class="com.foo.LoginAction" scope="request"/>

針對每次HTTP請求,Spring容器會根據loginAction bean定義創建一個全新的LoginAction bean實例, 且該loginAction bean實例僅在當前HTTP request內有效,因此可以根據需要放心的更改所建實例的內部狀態, 而其他請求中根據loginAction bean定義創建的實例,將不會看到這些特定於某個請求的狀態變化。 當處理請求結束,request作用域的bean實例將被銷燬。

簡單的說,

scope=”request”

每次HTTP請求,Spring容器會根據所對應類創建一個全新的bean實例。這個對象實例只在當前request中有效。

 

Session作用域

考慮下面bean定義:

<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>

針對某個HTTP Session,Spring容器會根據userPreferences bean定義創建一個全新的userPreferences bean實例, 且該userPreferences bean僅在當前HTTP Session內有效。 與request作用域一樣,你可以根據需要放心的更改所創建實例的內部狀態,而別的HTTP Session中根據userPreferences創建的實例, 將不會看到這些特定於某個HTTP Session的狀態變化。 當HTTP Session最終被廢棄的時候,在該HTTP Session作用域內的bean也會被廢棄掉。

簡單的說,

scope=”session”

每次HTTP session,Spring容器會根據所對應類創建一個全新的bean實例。這個對象實例只在當前HTTP session中有效。

 

global session作用域

考慮下面bean定義:

<bean id="userPreferences" class="com.foo.UserPreferences" scope="globalSession"/>

global session作用域類似於標準的HTTP Session作用域,不過它僅僅在基於portlet的web應用中才有意義。Portlet規範定義了全局Session的概念,它被所有構成某個portlet web應用的各種不同的portlet所共享。在global session作用域中定義的bean被限定於全局portlet Session的生命週期範圍內。

請注意,假如你在編寫一個標準的基於Servlet的web應用,並且定義了一個或多個具有global session作用域的bean,系統會使用標準的HTTP Session作用域,並且不會引起任何錯誤。

簡單的說,

scope=”globalSession”

global session類似於HTTP Session作用域,它只有對portlet纔有意義。對於Servlet的web應用就相當於session。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章