官术网_书友最值得收藏!

2.2 Bean的作用域

通過Spring容器創(chuàng)建一個Bean的實例時,不僅可以完成Bean的實例化,還可以為Bean指定特定的作用域。本節(jié)將主要講解Bean的作用域相關的知識。

2.2.1 作用域的種類

Spring 4.3中為Bean的實例定義了7種作用域,如表2.2所示。其中,singleton和prototype是常用的兩種,在接下來的兩小節(jié)中將會對這兩種作用域進行詳細講解。

表2.2 Bean的作用域

2.2.2 singleton作用域

singleton是Spring容器默認的作用域,當Bean的作用域為singleton時,Spring容器就只會存在一個共享的Bean實例,并且所有對Bean的請求,只要id與該Bean的id屬性相匹配,就會返回同一個Bean的實例。singleton作用域對于無會話狀態(tài)的Bean(如Dao組件、Service組件)來說是最理想的選擇。

在Spring配置文件中,Bean的作用域是通過<bean>元素的scope屬性來指定的,該屬性值可以設置為singleton、prototype、request、session、globalSession、application、websocket七個值,分別表示表2.2中的7種作用域。要將作用域定義成singleton,需將scope的屬性值設置為singleton,其示例代碼如下。

<bean id="scope"  class="com.ssm.scope.Scope"  scope="singleton" />

【示例2-1】下面通過一個案例來進一步演示singleton作用域。

(1)在Eclipse中創(chuàng)建一個名為chapter02的Web項目,在該項目的lib目錄中加入Spring支持和依賴的JAR包(在第1章相關內容基礎上增加spring-aop-4.3.6.RELEASE.jar依賴包,并發(fā)布到類路徑下)。

(2)在chapter02項目的src目錄下創(chuàng)建一個com.ssm.scope包,在該包中創(chuàng)建Scope類,該類不需要寫什么方法,如文件2.1所示。

文件2.1 Scope.java

(3)在com.ssm.scope包中創(chuàng)建Spring的配置文件applicationContext.xml,并在配置文件中創(chuàng)建一個id為scope的Bean,通過class屬性指定其對應的實現類為Scope,如文件2.2所示。

文件2.2 applicationContext.xml

(4)在com.ssm.scope包中創(chuàng)建測試類ScopeTest來測試singleton作用域,如文件2.3所示。

文件2.3 ScopeTest.java

執(zhí)行程序后,控制臺的輸出結果如圖2.1所示。從中可以看出,兩次輸出的結果相同,這說明Spring容器只創(chuàng)建了一個Scope類的實例。

圖2.1 運行結果

注意

如果不設置scope="singleton",其輸出結果也是一個實例,因為Spring容器默認的作用域就是singleton。

2.2.3 prototype作用域

對需要保持會話狀態(tài)的Bean應用使用prototype作用域。在使用prototype作用域時,Spring容器會為每個對該Bean的請求都創(chuàng)建一個新的實例。

要將Bean定義為prototype作用域,只需在配置文件中將<bean>元素的scope屬性值設置為prototype即可,其示例代碼如下。

<bean id="scope" class="com.ssm.scope.Scope" scope="prototype"/>

將2.2.2小節(jié)中的配置文件更改成上述代碼形式后,再次運行測試類ScopeTest,控制臺的輸出結果如圖2.2所示。從中可以看到,兩次輸出的Bean實例并不相同,這說明在prototype作用域下創(chuàng)建了兩個不同的Scope實例。

圖2.2 運行結果

主站蜘蛛池模板: 潜山县| 彝良县| 天长市| 庆云县| 邛崃市| 晋城| 通许县| 新龙县| 毕节市| 广元市| 滕州市| 博爱县| 巴彦县| 大丰市| 广饶县| 突泉县| 静海县| 曲周县| 尼木县| 永城市| 龙江县| 耿马| 海丰县| 合肥市| 馆陶县| 安阳县| 嘉定区| 铜山县| 岑溪市| 监利县| 道真| 沙坪坝区| 泰兴市| 桂平市| 荃湾区| 七台河市| 和政县| 五莲县| 南郑县| 阜宁县| 章丘市|