(四):Spring Bean 作用域

Bean 的作用域

當在 Spring 中定義一個 bean 時,你必須聲明該 bean 的作用域的選項。

Spring 框架支持以下五個作用域,分別爲singleton、prototype、request、session和global session,5種作用域說明如下所示,

作用域 描述
singleton

在spring IoC容器僅存在一個Bean實例,Bean以單例方式存在,默認值

prototype 每次從容器中調用Bean時,都返回一個新的實例,即每次調用getBean()時,相當於執行newXxxBean()
request 每次HTTP請求都會創建一個新的Bean,該作用域僅適用於WebApplicationContext環境
session 同一個HTTP Session共享一個Bean,不同Session使用不同的Bean,僅適用於WebApplicationContext環境
global-session 一般用於Portlet應用環境,該運用域僅適用於WebApplicationContext環境

 

舉個栗子:

<!-- A bean definition with *** -->
<bean id="..." class="..." scope="">
    <!-- collaborators and configuration for this bean go here -->
</bean>

singleton 作用域:

singleton 是默認的作用域,也就是說,當定義 Bean 時,如果沒有指定作用域配置項,則 Bean 的作用域被默認爲 singleton。

當一個bean的作用域爲Singleton,那麼Spring IoC容器中只會存在一個共享的bean實例,並且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一實例。

也就是說,當將一個bean定義設置爲singleton作用域的時候,Spring IoC容器只會創建該bean定義的唯一實例。

prototype 作用域

當一個bean的作用域爲Prototype,表示一個bean定義對應多個對象實例。Prototype作用域的bean會導致在每次對該bean請求(將其注入到另一個bean中,或者以程序的方式調用容器的getBean()方法)時都會創建一個新的bean實例。Prototype是原型類型,它在我們創建容器的時候並沒有實例化,而是當我們獲取bean的時候纔會去創建一個對象,而且我們每次獲取到的對象都不是同一個對象。根據經驗,對有狀態的bean應該使用prototype作用域,而對無狀態的bean則應該使用singleton作用域。

發佈了63 篇原創文章 · 獲贊 12 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章