1. 程式人生 > >Spring中的scope配置和@Scope註解

Spring中的scope配置和@Scope註解

article rac 新的 clas 文件中 常用 sdn web應用 req

Scope,也稱作用域,在 Spring IoC 容器是指其創建的 Bean 對象相對於其他 Bean 對象的請求可見範圍。在 Spring IoC 容器中具有以下幾種作用域:基本作用域(singleton、prototype),Web 作用域(reqeust、session、globalsession),自定義作用域。
1、Spring 的作用域在裝配 Bean 時就必須在配置文件中指明,配置方式如下(以 xml 配置文件為例):

<!-- 具體的作用域需要在 scope 屬性中定義 -->
<bean id="XXX" class="com.XXX.XXXXX" scope
="XXXX" />

singleton:單例模式,在整個Spring IoC容器中,使用singleton定義的Bean將只有一個實例

prototype:原型模式,每次通過容器的getBean方法獲取prototype定義的Bean時,都將產生一個新的Bean實例

request:對於每次HTTP請求,使用request定義的Bean都將產生一個新實例,即每次HTTP請求將會產生不同的Bean實例。只有在Web應用中使用Spring時,該作用域才有效

session:對於每次HTTP Session,使用session定義的Bean豆漿產生一個新實例。同樣只有在Web應用中使用Spring時,該作用域才有效

globalsession:每個全局的HTTP Session,使用session定義的Bean都將產生一個新實例。典型情況下,僅在使用portlet context的時候有效。同樣只有在Web應用中使用Spring時,該作用域才有效

  其中比較常用的是singleton和prototype兩種作用域。對於singleton作用域的Bean,每次請求該Bean都將獲得相同的實例。容器負責跟蹤Bean實例的狀態,負責維護Bean實例的生命周期行為;如果一個Bean被設置成prototype作用域,程序每次請求該id的Bean,Spring都會新建一個Bean實例,然後返回給程序。在這種情況下,Spring容器僅僅使用new 關鍵字創建Bean實例,一旦創建成功,容器不在跟蹤實例,也不會維護Bean實例的狀態。

  如果不指定Bean的作用域,Spring默認使用singleton作用域。Java在創建Java實例時,需要進行內存申請;銷毀實例時,需要完成垃圾回收,這些工作都會導致系統開銷的增加。因此,prototype作用域Bean的創建、銷毀代價比較大。而singleton作用域的Bean實例一旦創建成功,可以重復使用。因此,除非必要,否則盡量避免將Bean被設置成prototype作用域。
  
 2、基於註解開發時,@scope完成bean的作用域配置默認是單例模式(singleton)如果需要設置的話可以修改對應值與以上提到的一致例如:@scope(“prototype”)

轉載地址:https://blog.csdn.net/tracycater/article/details/54019223

Spring中的scope配置和@Scope註解