bean的scope的屬性

2021-08-31 06:33:27 字數 1466 閱讀 6844

1.singleton (預設屬性)

spring將bean放入spring ioc容器的快取池中,並將bean引用返回給呼叫者,spring ioc繼續對這些bean進行後續的生命管理。beanfactory只管理乙個共享的例項。所有對這個特定bean的例項請求,都導致返回這個唯一bean例項的引用。

即每次拿到的物件都是引用的同乙個位址的物件。當乙個bean被標識為singleton時候,spring的ioc容器中只會存在乙個該bean。

2.prototype

spring將bean返回給呼叫者,呼叫者負責bean後續生命的管理,spring不再管理這些bean的生命週期。

每次對這個bean的例項請求都會導致乙個新的例項的建立。當使用者需要不受其他使用者物件影響的物件或有類似的需求時,這是乙個較理想的解決辦法。

即每次拿到的物件都是引用的不同位址的物件。相當於乙個new的操作。清除prototype作用域的物件並釋放任何prototype bean所持有的昂貴資源,都是客戶端**的職責

以下的3種scope都使用的較少,類似於j2ee裡面的request和session。在使用springmvc是可能會用到。

3.request

‍request表示該針對每一次http請求都會產生乙個新的bean,同時該bean僅在當前http request內有效,配置例項: request、session、global session使用的時候首先要在初始化web的web.xml中做如下配置:如果你使用的是servlet 2.4及以上的web容器,那麼你僅需要在web應用的xml宣告檔案web.xml中增加下述contextlistener即可:

‍org.springframework.web.context.request.requestcontextlistener

4.session

‍session作用域表示該針對每一次http請求都會產生乙個新的bean,同時該bean僅在當前http session內有效

5.global session

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

對於action來說需要指明scope=」prototype」或singleton=」false」,因為action是執行緒不安全的,可能會導致跳轉的頁面錯誤。

對於帶有資料成員變數的類需要指明scope=」prototype」或singleton=」false」。不然這樣會導致多個執行緒共用同乙個成員變數。

有狀態的bean都使用prototype作用域,而對無狀態的bean則應該使用singleton作用域。

Spring中bean中scope屬性的意義

scope prototype 預設情況下,從 bean工廠所取得的例項為singleton bean的singleton屬性 singleton spring容器只存在乙個共享的bean例項,預設的配置。prototype 每次對bean的請求都會建立乙個新的bean例項。二者選擇的原則 有狀態的...

Bean的作用域Scope

在spring中,bean作用域用於確定哪種型別的bean例項應該從spring容器中返回給呼叫者。目前spring bean的作用域或者說範圍主要有五種。作用域描述 singleton 在spring ioc容器僅存在乙個bean例項,bean以單例方式存在,bean作用域範圍的預設值。proto...

Bean的作用域scope

bean的作用域scope 1 singleton 單例,指乙個bean容器中只存在乙份 2 prototype 每次請求 每次使用 建立新的例項,destroy方式不生效 3 request 每次http請求建立乙個例項且僅在當前request內有效 4 session 同上,每次http請求建立...