最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Spring中的scope配置和@scope注解

 更新時間:2022年06月13日 10:46:13   作者:羅羅諾亞F  
這篇文章主要介紹了使用Spring中的scope配置和@scope注解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring的scope配置和@scope注解

Scope,也稱作用域,在 Spring IoC 容器是指其創(chuàng)建的 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時,都將產(chǎn)生一個新的Bean實例
  • request:對于每次HTTP請求,使用request定義的Bean都將產(chǎn)生一個新實例,即每次HTTP請求將會產(chǎn)生不同的Bean實例。只有在Web應(yīng)用中使用Spring時,該作用域才有效
  • session:對于每次HTTP Session,使用session定義的Bean都將產(chǎn)生一個新實例。同樣只有在Web應(yīng)用中使用Spring時,該作用域才有效
  • globalsession:每個全局的HTTP Session,使用session定義的Bean都將產(chǎn)生一個新實例。典型情況下,僅在使用portlet context的時候有效。同樣只有在Web應(yīng)用中使用Spring時,該作用域才有效

其中比較常用的是singleton和prototype兩種作用域。

對于singleton作用域的Bean,每次請求該Bean都將獲得相同的實例。容器負責跟蹤Bean實例的狀態(tài),負責維護Bean實例的生命周期行為;如果一個Bean被設(shè)置成prototype作用域,程序每次請求該id的Bean,Spring都會新建一個Bean實例,然后返回給程序。在這種情況下,Spring容器僅僅使用new 關(guān)鍵字創(chuàng)建Bean實例,一旦創(chuàng)建成功,容器不在跟蹤實例,也不會維護Bean實例的狀態(tài)。

如果不指定Bean的作用域,Spring默認使用singleton作用域。Java在創(chuàng)建Java實例時,需要進行內(nèi)存申請;銷毀實例時,需要完成垃圾回收,這些工作都會導(dǎo)致系統(tǒng)開銷的增加。因此,prototype作用域Bean的創(chuàng)建、銷毀代價比較大。而singleton作用域的Bean實例一旦創(chuàng)建成功,可以重復(fù)使用。因此,除非必要,否則盡量避免將Bean被設(shè)置成prototype作用域。

2. 基于注解開發(fā)時

@scope完成bean的作用域配置默認是單例模式(singleton)如果需要設(shè)置的話可以修改對應(yīng)值與以上提到的一致例如:@scope(“prototype”)

Spring中的scope詳解

思維導(dǎo)圖

1. scope概論

spring中scope是一個非常關(guān)鍵的概念,簡單說就是對象在spring容器(IOC容器)中的生命周期,也可以理解為對象在spring容器中的創(chuàng)建方式。

2. scope歷史及分類

目前,scope的取值有5種取值:

在Spring 2.0之前,有singleton和prototype兩種;

在Spring 2.0之后,為支持web應(yīng)用的ApplicationContext,增強另外三種:request,session和global session類型,它們只實用于web程序,通常是和XmlWebApplicationContext共同使用。

3. 單個scope詳解

1)singleton (單一實例)

此取值時表明容器中創(chuàng)建時只存在一個實例,所有引用此bean都是單一實例。如同每個國家都有一個總統(tǒng),國家的所有人共用此總統(tǒng),而這個國家就是一個spring容器,總統(tǒng)就是spring創(chuàng)建的類的bean,國家中的人就是其它調(diào)用者,總統(tǒng)是一個表明其在spring中的scope為singleton,也就是單例模型。

此外,singleton類型的bean定義從容器啟動到第一次被請求而實例化開始,只要容器不銷毀或退出,該類型的bean的單一實例就會一直存活,典型單例模式,如同servlet在web容器中的生命周期。

2)prototype

spring容器在進行輸出prototype的bean對象時,會每次都重新生成一個新的對象給請求方,雖然這種類型的對象的實例化以及屬性設(shè)置等工作都是由容器負責的,但是只要準備完畢,并且對象實例返回給請求方之后,容器就不在擁有當前對象的引用,請求方需要自己負責當前對象后繼生命周期的管理工作,包括該對象的銷毀。也就是說,容器每次返回請求方該對象的一個新的實例之后,就由這個對象“自生自滅”,最典型的體現(xiàn)就是spring與struts2進行整合時,要把action的scope改為prototype。

如同分蘋果,將蘋果的bean的scope屬性聲明為prototype,在每個人領(lǐng)取蘋果的時候,我們都是發(fā)一個新的蘋果給他,發(fā)完之后,別人愛怎么吃就怎么吃,愛什么時候吃什么時候吃,但是注意吃完要把蘋果核扔到垃圾箱!對于那些不能共享使用的對象類型,應(yīng)該將其定義的scope設(shè)為prototype。

3)request

再次說明 request,session和global session類型只實用于 web程序,通常是和XmlWebApplicationContext共同使用。

<bean id ="requestPrecessor" class="...RequestPrecessor"?? scope="request" />

Spring容器,即XmlWebApplicationContext 會為每個HTTP請求創(chuàng)建一個全新的RequestPrecessor對象,當請求結(jié)束后,該對象的生命周期即告結(jié)束,如同java web中request的生命周期。當同時有100個HTTP請求進來的時候,容器會分別針對這10個請求創(chuàng)建10個全新的RequestPrecessor實例,且他們相互之間互不干擾,簡單來講,request可以看做prototype的一種特例,除了場景更加具體之外,語意上差不多。

4)session

對于web應(yīng)用來說,放到session中最普遍的就是用戶的登錄信息,對于這種放到session中的信息,我們可以使用如下形式的制定scope為session:

<bean id ="userPreferences" class="...UserPreferences"?? scope="session" />

Spring容器會為每個獨立的session創(chuàng)建屬于自己的全新的UserPreferences實例,比request scope的bean會存活更長的時間,其他的方面沒區(qū)別,如果java web中session的生命周期。

5)global session

<bean id ="userPreferences" class="...UserPreferences"?? scope="globalsession" />

global session只有應(yīng)用在基于porlet的web應(yīng)用程序中才有意義,它映射到porlet的global范圍的session,如果普通的servlet的web 應(yīng)用中使用了這個scope,容器會把它作為普通的session的scope對待。

4. scope配置

1)xml方式

進行bean的配置時,指定scope。

2)注解方式

前提為配置spring為注解配置。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 利用HttpUrlConnection 上傳 接收文件的實現(xiàn)方法

    利用HttpUrlConnection 上傳 接收文件的實現(xiàn)方法

    下面小編就為大家?guī)硪黄肏ttpUrlConnection 上傳 接收文件的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • elasticsearch的zenDiscovery和master選舉機制原理分析

    elasticsearch的zenDiscovery和master選舉機制原理分析

    這篇文章主要介紹了elasticsearch的zenDiscovery和master選舉機制原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • spring boot使用自定義的線程池執(zhí)行Async任務(wù)

    spring boot使用自定義的線程池執(zhí)行Async任務(wù)

    這篇文章主要介紹了spring boot使用自定義的線程池執(zhí)行Async任務(wù)的相關(guān)資料,需要的朋友可以參考下
    2018-02-02
  • java中避免集合死鏈調(diào)用詳情

    java中避免集合死鏈調(diào)用詳情

    這篇文章主要介紹了java中避免集合死鏈調(diào)用,開發(fā)過程中, 一些集合 的變動會觸發(fā)任務(wù)去 改變 其他的集合 ,為了保障任務(wù)的正確執(zhí)行,應(yīng)避免出現(xiàn)死循環(huán)調(diào)用,即對 集合之間的影響關(guān)系 進行一些限制,下面文章就來看看這種問題的避免
    2021-09-09
  • Java 并行數(shù)據(jù)處理和性能分析

    Java 并行數(shù)據(jù)處理和性能分析

    這篇文章主要介紹了Java 并行數(shù)據(jù)處理和性能分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Spring?RestTemplate遠程調(diào)用過程

    Spring?RestTemplate遠程調(diào)用過程

    這篇文章主要介紹了Spring?RestTemplate遠程調(diào)用過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java通過正則表達式獲取域名簡單示例

    Java通過正則表達式獲取域名簡單示例

    在Java中可以使用正則表達式來從字符串中匹配和提取域名,下面這篇文章主要給大家介紹了關(guān)于Java通過正則表達式獲取域名的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Java中CountDownLatch進行多線程同步詳解及實例代碼

    Java中CountDownLatch進行多線程同步詳解及實例代碼

    這篇文章主要介紹了Java中CountDownLatch進行多線程同步詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 一文搞懂Java中的反射機制

    一文搞懂Java中的反射機制

    這篇文章主要介紹了Java中反射機制的相關(guān)資料,幫助大家更好的理解和學(xué)習,感興趣的朋友可以了解下
    2020-08-08
  • JAVA獲得域名IP地址的方法

    JAVA獲得域名IP地址的方法

    這篇文章主要介紹了JAVA獲得域名IP地址的方法,涉及java域名操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06

最新評論

东平县| 正宁县| 富蕴县| 临沭县| 商都县| 通榆县| 金寨县| 兖州市| 永昌县| 珲春市| 凤台县| 广元市| 西平县| 武鸣县| 邢台市| 安康市| 新宾| 威信县| 竹北市| 通渭县| 顺义区| 平陆县| 永昌县| 昌乐县| 奎屯市| 公安县| 广西| 合山市| 潍坊市| 榆林市| 九江县| 南通市| 日土县| 上栗县| 宜宾县| 嘉定区| 怀集县| 临朐县| 安龙县| 桃园县| 拜泉县|