欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring注解@Scope原理及用法解析

 更新時間:2020年03月30日 10:42:07   作者:知了123  
這篇文章主要介紹了Spring注解@Scope原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

主要從以下幾方面來介紹一下@Scope注解

  • @Scope注解是什么
  • @Scope注解怎么使用
  • @Scope注解的使用場景

1,@Scope注解是什么

@Scope注解是springIoc容器中的一個作用域,在 Spring IoC 容器中具有以下幾種作用域:基本作用域singleton(單例)、prototype(多例),Web 作用域(reqeust、session、globalsession),自定義作用域

a.singleton單例模式 -- 全局有且僅有一個實例
b.prototype原型模式 -- 每次獲取Bean的時候會有一個新的實例
c.request -- request表示該針對每一次HTTP請求都會產(chǎn)生一個新的bean,同時該bean僅在當(dāng)前HTTP request內(nèi)有效
d.session -- session作用域表示該針對每一次HTTP請求都會產(chǎn)生一個新的bean,同時該bean僅在當(dāng)前HTTP session內(nèi)有效
e.globalsession -- global session作用域類似于標(biāo)準(zhǔn)的HTTP Session作用域,不過它僅僅在基于portlet的web應(yīng)用中才有意義

2,@Scope注解怎么使用

直接在bean對象方法上增加@Scope注解就可以如下:

/**
   * 定義一個bean對象
   * @return
   */
  @Scope
  @Bean(value="user0",name="user0",initMethod="initUser",destroyMethod="destroyUser")
  public User getUser(){
    System.out.println("創(chuàng)建user實例");
    return new User("張三",26);
  }

@Scope注解默認(rèn)的singleton實例,singleton實例的意思不管你使用多少次在springIOC容器中只會存在一個實例,演示如下只打印了一次創(chuàng)建實例:

AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(MainConfig.class);
User bean2 = applicationContext2.getBean(User.class);
System.out.println("實例1 === "+bean2);
User bean3 = applicationContext2.getBean(User.class);
System.out.println("實例2 === "+bean3);

創(chuàng)建user實例
實例1 === User [userName=張三, age=26]
實例2 === User [userName=張三, age=26]

接下來把實例類型改為prototype如下:

@Scope(value="prototype")

運行結(jié)果如下:

創(chuàng)建user實例
實例1 === User [userName=張三, age=26]
創(chuàng)建user實例
實例2 === User [userName=張三, age=26]

注:這邊只演示了我們常用的兩種作用域,其他的大家可以下去自己試試

3,@Scope注解的使用場景

幾乎90%以上的業(yè)務(wù)使用singleton單實例就可以,所以spring默認(rèn)的類型也是singleton,singleton雖然保證了全局是一個實例,對性能有所提高,但是如果實例中有非靜態(tài)變量時,會導(dǎo)致線程安全問題,共享資源的競爭

當(dāng)設(shè)置為prototype時:每次連接請求,都會生成一個bean實例,也會導(dǎo)致一個問題,當(dāng)請求數(shù)越多,性能會降低,因為創(chuàng)建的實例,導(dǎo)致GC頻繁,gc時長增加

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot居然有44種應(yīng)用啟動器,你都知道嗎

    SpringBoot居然有44種應(yīng)用啟動器,你都知道嗎

    很多人都不知道SpringBoot應(yīng)用啟動器竟然有44個,本文就一起來介紹一下,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-01-01
  • Mybatis?MappedStatement類核心原理詳解

    Mybatis?MappedStatement類核心原理詳解

    這篇文章主要介紹了Mybatis?MappedStatement類,mybatis的mapper文件最終會被解析器,解析成MappedStatement,其中insert|update|delete|select每一個標(biāo)簽分別對應(yīng)一個MappedStatement
    2022-11-11
  • 淺析JVM的垃圾回收器

    淺析JVM的垃圾回收器

    這篇文章主要介紹了JVM垃圾回收器的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java虛擬機(jī)的相關(guān)知識,感興趣的朋友可以了解下
    2020-11-11
  • Java中的?CyclicBarrier詳解

    Java中的?CyclicBarrier詳解

    這篇文章主要介紹了Java中的?CyclicBarrier詳解,CyclicBarrier沒有顯示繼承哪個父類或者實現(xiàn)哪個父接口,?所有AQS和重入鎖不是通過繼承實現(xiàn)的,而是通過組合實現(xiàn)的,下文相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • Mybatis傳單個參數(shù)和<if>標(biāo)簽同時使用的問題及解決方法

    Mybatis傳單個參數(shù)和<if>標(biāo)簽同時使用的問題及解決方法

    這篇文章主要介紹了Mybatis傳單個參數(shù)和<if>標(biāo)簽同時使用的問題及解決方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-05-05
  • 解決Maven多模塊編譯慢的問題

    解決Maven多模塊編譯慢的問題

    這篇文章主要介紹了Maven多模塊編譯慢的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java封裝空值建議使用Optional替代null的方法示例解析

    java封裝空值建議使用Optional替代null的方法示例解析

    這篇文章主要為大家介紹了java封裝空值建議使用Optional替代null的方法原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • JAVA實現(xiàn)掃描線算法(超詳細(xì))

    JAVA實現(xiàn)掃描線算法(超詳細(xì))

    掃描線算法就是從Ymin開始掃描,然后構(gòu)建出NET,之后根據(jù)NET建立AET。接下來本文通過代碼給大家介紹JAVA實現(xiàn)掃描線算法,感興趣的朋友一起看看吧
    2019-10-10
  • 詳解mybatis流式查詢與分頁插件

    詳解mybatis流式查詢與分頁插件

    這篇文章主要介紹了mybatis流式查詢與分頁插件,本文通過實例代碼給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • Java中的ConcurrentLinkedQueue松散隊列解析

    Java中的ConcurrentLinkedQueue松散隊列解析

    這篇文章主要介紹了Java中的ConcurrentLinkedQueue松散隊列解析,鏈表是松散的,鏈表節(jié)點并不都是有效的,允許存在無效節(jié)點val=null,但是只有最后一個節(jié)點才能next=null,需要的朋友可以參考下
    2023-12-12

最新評論