Bean的作用域

在<bean>中有一個scope屬性,它分別有五個值可選

  1. singleto
    當(dāng)一個bean的作用域為singleton, 那么Spring IoC容器中只會存在一個共享的bean實例,并且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一實例。

  2. prototype
    一個bean定義對應(yīng)多個對象實例。Prototype作用域的bean會導(dǎo)致在每次對該bean請求(將其注入到另一個bean中,或者以程序的方式調(diào)用容器的getBean()方法)時都會創(chuàng)建一個新的bean實例。根據(jù)經(jīng)驗,對有狀態(tài)的bean應(yīng)該使用prototype作用域,而對無狀態(tài)的bean則應(yīng)該使用singleton作用域。

  3. request
    在一次HTTP請求中,一個bean定義對應(yīng)一個實例;即每次HTTP請求將會有各自的bean實例, 它們依據(jù)某個bean定義創(chuàng)建而成。該作用域僅在基于web的Spring ApplicationContext情形下有效。

    考慮下面bean定義:
    <bean id="loginAction" class=cn.csdn.LoginAction" scope="request"/>

    針對每次HTTP請求,Spring容器會根據(jù)loginAction bean定義創(chuàng)建一個全新的LoginAction bean實例, 且該loginAction bean實例僅在當(dāng)前HTTP request內(nèi)有效,因此可以根據(jù)需要放心的更改所建實例的內(nèi)部狀態(tài), 而其他請求中根據(jù)loginAction bean定義創(chuàng)建的實例,將不會看到這些特定于某個請求的狀態(tài)變化。 當(dāng)處理請求結(jié)束,request作用域的bean實例將被銷毀。

  4. session
    在一個HTTP Session中,一個bean定義對應(yīng)一個實例。該作用域僅在基于web的Spring ApplicationContext情形下有效。

    考慮下面bean定義:
    <bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>

    針對某個HTTP Session,Spring容器會根據(jù)userPreferences bean定義創(chuàng)建一個全新的userPreferences bean實例, 且該userPreferences bean僅在當(dāng)前HTTP Session內(nèi)有效。 與request作用域一樣,你可以根據(jù)需要放心的更改所創(chuàng)建實例的內(nèi)部狀態(tài),而別的HTTP Session中根據(jù)userPreferences創(chuàng)建的實例, 將不會看到這些特定于某個HTTP Session的狀態(tài)變化。 當(dāng)HTTP Session最終被廢棄的時候,在該HTTP Session作用域內(nèi)的bean也會被廢棄掉。

  5. global session
    在一個全局的HTTP Session中,一個bean定義對應(yīng)一個實例。典型情況下,僅在使用portlet context的時候有效。該作用域僅在基于web的Spring ApplicationContext情形下有效。

    考慮下面bean定義:
    <bean id="userPreferences" class="com.foo.UserPreferences" scope="globalSession"/>

    global session作用域類似于標(biāo)準(zhǔn)的HTTP Session作用域,不過它僅僅在基于portlet的web應(yīng)用中才有意義。Portlet規(guī)范定義了全局Session的概念,它被所有構(gòu)成某個portlet web應(yīng)用的各種不同的portlet所共享。在global session作用域中定義的bean被限定于全局portlet Session的生命周期范圍內(nèi)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,981評論 19 139
  • 當(dāng)通過spring容器創(chuàng)建一個Bean實例時,不僅可以完成Bean實例的實例化,還可以為Bean指定特定的作用域。...
    熊熊要更努力閱讀 1,382評論 0 1
  • Spring Bean,就像JavaBeans中一樣,有其使用的作用域。前面的文章中我們已經(jīng)看到其中的兩個:sin...
    極樂君閱讀 1,003評論 0 0
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,970評論 6 342
  • Bean的作用域參考:spring FrameWork官方文檔spring4.x中官方有7中作用域,如果使用的是a...
    勃列日涅夫閱讀 682評論 0 1