- Spring+Spring MVC+MyBatis從零開始學
- 吳為勝 楊章偉
- 872字
- 2019-11-22 18:31:39
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 運行結果
- Unreal Engine Physics Essentials
- PHP 7底層設計與源碼實現
- 神經網絡編程實戰(zhàn):Java語言實現(原書第2版)
- Hadoop+Spark大數據分析實戰(zhàn)
- Learn Swift by Building Applications
- PySide GUI Application Development(Second Edition)
- 可解釋機器學習:模型、方法與實踐
- 數據結構與算法分析(C++語言版)
- Python+Tableau數據可視化之美
- Unity&VR游戲美術設計實戰(zhàn)
- Learning Node.js for .NET Developers
- Odoo 10 Implementation Cookbook
- HTML5+CSS3+jQuery Mobile+Bootstrap開發(fā)APP從入門到精通(視頻教學版)
- 小學生C++趣味編程從入門到精通
- Oracle Database 12c DBA官方手冊(第8版)