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

Spring?Bean中的六種作用域你了解嗎

 更新時(shí)間:2023年09月05日 10:55:50   作者:2o1?舊人不必等  
Bean的作用域是指Bean實(shí)例的生命周期及可見性范圍,Spring框架定義了6種作用域,本文就來和大家聊聊這6種作用域的定義與使用,希望對(duì)大家有所幫助

一、作用域是什么

Bean的作用域是指Bean實(shí)例的生命周期及可見性范圍,Spring框架定義了以下6種作用域:

1.singleton:單例作用域,所有對(duì)該Bean的請(qǐng)求都返回同一個(gè)Bean實(shí)例。

2.prototype:原型作用域,每次請(qǐng)求時(shí)都創(chuàng)建一個(gè)新的Bean實(shí)例。

3.request:請(qǐng)求作用域,每個(gè)HTTP請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的Bean實(shí)例,該Bean實(shí)例僅在當(dāng)前請(qǐng)求內(nèi)有效。

4.session:會(huì)話作用域,每個(gè)HTTP會(huì)話都會(huì)創(chuàng)建一個(gè)新的Bean實(shí)例,該Bean實(shí)例僅在當(dāng)前會(huì)話內(nèi)有效。

5.application:全局作用域,一個(gè)bean 定義對(duì)應(yīng)于單個(gè)ServletContext 的生命周期。

6.websocket: HTTP WebSocket 作用域,一個(gè)bean 定義對(duì)應(yīng)于單個(gè)websocket 的生命周期。

選擇適當(dāng)?shù)淖饔糜蚩梢蕴岣邞?yīng)用程序的性能和可維護(hù)性。

下面用一個(gè)例子來解釋Bean的作用域:你和別人一起協(xié)同開發(fā)的代碼中有個(gè)Bean不想別人改動(dòng),那就可以通過調(diào)整Bean的作用域來解決.

下面有兩個(gè)用戶張三和李四,張三呢 調(diào)用了公共對(duì)象,但是張三特意使用了 user2來接收,

此時(shí)李四也想使用這個(gè)對(duì)象;然后他們一起調(diào)用了,但是發(fā)現(xiàn)李四調(diào)用的時(shí)候這個(gè)Name也被修改成小貓了.這是為什么呢 張三明顯創(chuàng)建了一個(gè)新對(duì)象

其實(shí)真實(shí)的情況是Spring的IoC容器有兩種作用域模式,一種是IoC默認(rèn)的singleton(單例作用域),一種是可手動(dòng)修改的prototype(原型作用域 / 多例作用域),在默認(rèn)情況下,IoC容器采用singleton,也就是所有人獲取到的都是同一個(gè)Bean對(duì)象,這樣效率會(huì)高很多.

所以當(dāng)我們使用原型模式時(shí)這個(gè)問題就解決了

//張三
@Controller
public class UserController2 {
    @Autowired
    private User user;
    public void doMethod() {
        User user2 = user;
        System.out.println("UserController2 修改之前:User -> " + user);
        user2.setName("小貓");
        System.out.println("UserController2 修改之后:User -> " + user);
    }
}
//李四
@Controller
public class UserController3 {
    @Autowired
    private User user;
    public void doMethod() {
        System.out.println("UserController3:user -> " + user);
    }
}

1、singleton(單例作用域)

官?說明:(Default) Scopes a single bean definition to a single object instance for each Spring IoC container.

描述:該作?域下的Bean在IoC容器中只存在?個(gè)實(shí)例:獲取Bean(即通過applicationContext.getBean等?法獲?。┘把b配Bean(即通過@Autowired注?)都是同?個(gè)對(duì)象。

場景:通常?狀態(tài)的Bean使?該作?域。?狀態(tài)表示Bean對(duì)象的屬性狀態(tài)不需要更新

備注:Spring默認(rèn)選擇該作?域

2、prototype(原型作用域)

官?說明:Scopes a single bean definition to any number of object instances.

描述:每次對(duì)該作?域下的Bean的請(qǐng)求都會(huì)創(chuàng)建新的實(shí)例:獲取Bean(即通過applicationContext.getBean等?法獲取)及裝配Bean(即通過@Autowired注?)都是新的對(duì)象實(shí)例。

場景:通常有狀態(tài)的Bean使?該作?域

上圖中,每個(gè)引用對(duì)應(yīng)一個(gè)新的 bean 實(shí)例。

請(qǐng)注意,上圖中的例子不適用于生產(chǎn)環(huán)境。因?yàn)?DAO 通常來說是無狀態(tài)的 bean ,應(yīng)該指定它的作用域?yàn)?singleton 比較合適

3、request(請(qǐng)求作用域)

官?說明:Scopes a single bean definition to the lifecycle of a single HTTP request. That is, each HTTP request has its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring ApplicationContext.

描述:每次http請(qǐng)求會(huì)創(chuàng)建新的Bean實(shí)例,類似于prototype

場景:?次http的請(qǐng)求和響應(yīng)的共享Bean

備注:限定SpringMVC中使?

4、session(回話作用域)

官?說明:Scopes a single bean definition to the lifecycle of an HTTP Session. Only valid in the context of a web-aware Spring ApplicationContext.

描述:在?個(gè)http session中,定義?個(gè)Bean實(shí)例

場景:?戶回話的共享Bean, ?如:記錄?個(gè)?戶的登陸信息

備注:限定SpringMVC中使?

5、application(全局作用域)

官?說明:Scopes a single bean definition to the lifecycle of a ServletContext. Only valid in the context of a web-aware Spring ApplicationContext.

描述:在?個(gè)http servlet Context中,定義?個(gè)Bean實(shí)例

場景:Web應(yīng)?的上下?信息,?如:記錄?個(gè)應(yīng)?的共享信息

備注:限定SpringMVC中使?

6、websocket( HTTP WebSocket 作用域)

官?說明:Scopes a single bean definition to the lifecycle of a WebSocket. Only valid in the context of a web-aware Spring ApplicationContext.

描述:在?個(gè)HTTP WebSocket的?命周期中,定義?個(gè)Bean實(shí)例

場景:WebSocket的每次會(huì)話中,保存了?個(gè)Map結(jié)構(gòu)的頭信息,將?來包裹客戶端消息頭。第?次初始化后,直到WebSocket結(jié)束都是同?個(gè)Bean。

備注:限定Spring WebSocket中使?

二、單例作?域VS 全局作?域

  • singleton 是 Spring Core 的作?域;application 是 Spring Web 中的作?域;
  • singleton 作?于 IoC 的容器,? application 作?于 Servlet 容器。

三、設(shè)置作用域

singleton 作用域是 Spring 中默認(rèn)的作用域,

使? @Scope 標(biāo)簽就可以?來聲明 Bean 的作?域,?如設(shè)置 Bean 的作?域,如下代碼所示:

@Component
public class Users {
    @Scope(prototype)
    @Bean(name = "u")
    public User user() {
        User user = new User();
        user.setId(1);
        user.setName("Hi user"); 
        return user;
    }
}

@Scope 標(biāo)簽既可以修飾?法也可以修飾類,@Scope 有兩種設(shè)置?式:

1. 直接設(shè)置值:@Scope("prototype")

2. 使?枚舉設(shè)置:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

以上就是Spring Bean中的六種作用域你了解嗎的詳細(xì)內(nèi)容,更多關(guān)于Bean作用域的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring Boot開發(fā)編譯后讀取不到@spring.profiles.active@的問題及解決步驟

    Spring Boot開發(fā)編譯后讀取不到@spring.profiles.active@的問題及解決步驟

    這篇文章主要介紹了Spring Boot開發(fā)編譯后讀取不到@spring.profiles.active@的問題及解決步驟,需要的朋友可以參考下
    2024-12-12
  • java 容器的快速失敗(fast-fail)機(jī)制

    java 容器的快速失敗(fast-fail)機(jī)制

    Java容器的快速失敗機(jī)制是一種在迭代過程中檢測并處理集合并發(fā)修改的特性,該機(jī)制適用于ArrayList、HashMap等集合類,本文就來介紹一下java 容器的快速失敗(fast-fail)機(jī)制,感興趣的可以了解一下
    2024-11-11
  • MyBatis實(shí)現(xiàn)兩種查詢樹形數(shù)據(jù)的方法詳解(嵌套結(jié)果集和遞歸查詢)

    MyBatis實(shí)現(xiàn)兩種查詢樹形數(shù)據(jù)的方法詳解(嵌套結(jié)果集和遞歸查詢)

    樹形結(jié)構(gòu)數(shù)據(jù)在開發(fā)中十分常見,比如:菜單數(shù)、組織樹, 利用 MyBatis 提供嵌套查詢功能可以很方便地實(shí)現(xiàn)這個(gè)功能需求。本文主要介紹了兩種方法,感興趣的可以了解一下
    2021-09-09
  • Java源碼解析之可重入鎖ReentrantLock

    Java源碼解析之可重入鎖ReentrantLock

    今天小編就為大家分享一篇關(guān)于Java源碼解析之可重入鎖ReentrantLock,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • JVM 堆和棧的區(qū)別

    JVM 堆和棧的區(qū)別

    本文主要介紹了JVM堆和棧的區(qū)別。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • Java中的RMI使用方法詳解

    Java中的RMI使用方法詳解

    這篇文章主要介紹了Java中的RMI使用方法,RMI是Java提供的一個(gè)完善的簡單易用的遠(yuǎn)程方法調(diào)用框架,采用客戶服務(wù)器通信方式,在服務(wù)器上部署了提供各種服務(wù)的遠(yuǎn)程對(duì)象,下面我們來詳細(xì)講解
    2023-10-10
  • Jmeter?BlazeMeter實(shí)現(xiàn)web錄制過程

    Jmeter?BlazeMeter實(shí)現(xiàn)web錄制過程

    BlazeMeter是一款與Apache JMeter兼容的chrome插件,采用BlazeMeter可以方便的進(jìn)行流量錄制和腳本生成,作為接口測試腳本編寫的一個(gè)基礎(chǔ),這篇文章主要介紹了Jmeter?BlazeMeter實(shí)現(xiàn)web錄制,需要的朋友可以參考下
    2021-12-12
  • 深入學(xué)習(xí)springboot線程池的使用和擴(kuò)展

    深入學(xué)習(xí)springboot線程池的使用和擴(kuò)展

    這篇文章主要介紹了深入學(xué)習(xí)springboot線程池的使用和擴(kuò)展,springboot框架提供了@Async注解,幫助我們更方便的將業(yè)務(wù)邏輯提交到線程池中異步執(zhí)行,需要的朋友可以參考下
    2019-06-06
  • MybatisPlus實(shí)現(xiàn)數(shù)據(jù)權(quán)限隔離的示例詳解

    MybatisPlus實(shí)現(xiàn)數(shù)據(jù)權(quán)限隔離的示例詳解

    Mybatis Plus對(duì)Mybatis做了無侵入的增強(qiáng),非常的好用,今天就給大家介紹它的其中一個(gè)實(shí)用功能:數(shù)據(jù)權(quán)限插件,感興趣的可以跟隨小編一起了解下
    2024-04-04
  • Java深入分析講解反射機(jī)制

    Java深入分析講解反射機(jī)制

    反射是框架的靈魂,Java框架底層都是用反射機(jī)制+xml配置等來實(shí)現(xiàn)的,本文將通過示例詳細(xì)講解Java中的反射機(jī)制,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下
    2022-06-06

最新評(píng)論

镇康县| 广州市| 白河县| 慈溪市| 呼玛县| 芜湖市| 桐柏县| 诸暨市| 天镇县| 伊春市| 望江县| 墨竹工卡县| 新野县| 江源县| 定边县| 阜南县| 元阳县| 遂平县| 固始县| 旺苍县| 保定市| 新河县| 闽侯县| 乐陵市| 桂阳县| 商水县| 邛崃市| 龙门县| 峨山| 秭归县| 安化县| 博客| 亳州市| 杭锦后旗| 黄山市| 开原市| 乌兰浩特市| 神木县| 新安县| 邢台县| 桐柏县|