預設情況下,從 bean工廠所取得的例項為singleton(bean的singleton屬性) singleton: spring容器只存在乙個共享的bean例項,預設的配置。 prototype: 每次對bean的請求都會建立乙個新的bean例項。二者選擇的原則:有狀態的bean都使用prototype作用域,而對無狀態的bean則應該使用singleton作用域。
在 spring2.0中除了以前的singleton和prototype外又加入了三個新的web作用域,分別為request、session和 global session。如果你希望容器裡的某個bean擁有其中某種新的web作用域,除了在bean級上配置相應的scope屬性,還必須在容器級做乙個額外的初始化配置。即在web應用的web.xml中增加這麼乙個contextlistener: org.springframework.web.context.request.requestcontextlistener 以上是針對servlet 2.4以後的版本。比如request作用域:
注:有狀態的bean:
每個使用者有自己特有的乙個例項,在使用者的生存期內,bean保持了使用者的資訊,即「有狀態」;一旦使用者滅亡(呼叫結束或例項結束),bean的生命期也告結束。即每個使用者最初都會得到乙個初始的bean。無狀態的bean:
bean一旦例項化就被加進會話池中,各個使用者都可以共用。即使使用者已經消亡,bean 的生命期也不一定結束,它可能依然存在於會話池中,供其他使用者呼叫。由於沒有特定的使用者,那麼也就不能保持某一使用者的狀態,所以叫無狀態bean。但無狀態會話bean 並非沒有狀態,如果它有自己的屬性(變數),那麼這些變數就會受到所有呼叫它的使用者的影響,這是在實際應用中必須注意的。
簡單的說:singleton 只有乙個例項,也即是單例模式。
prototype訪問一次建立乙個例項,相當於new。
應用場合:
1.需要**重要資源(資料庫連線等)的事宜配置為singleton,如果配置為prototype需要應用確保資源正常**。
2.有狀態的bean配置成singleton會引發未知問題,可以考慮配置為prototype。
Spring中Bean的作用域
bean作用域 作用域描述 singleton 在每個spring ioc容器中乙個bean定義對應乙個物件例項。整個容器中只有該bean的唯一例項 prototype 乙個bean定義對應多個物件例項。request session global session 因為這樣在配置中的任何錯誤就會即刻...
spring中bean的作用域
如何使用spring的作用域 這裡的scope就是用來配置spring bean的作用域,它標識bean的作用域。在spring2.0之前bean只有2種作用域即 singleton 單例 non singleton 也稱prototype spring2.0以後,增加了session reques...
Spring中bean的作用域
1 singleton作用域 當乙個bean的作用域設定為singleton,spring ioc容器只會建立該bean定義的唯一例項。2 prototype prototype作用域部署的bean,每一次請求都會產生乙個新的bean例項,相當與乙個new的操作。3 request request表...