亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、作用域是什么

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

1.singleton:單例作用域,所有對該Bean的請求都返回同一個Bean實例。

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

3.request:請求作用域,每個HTTP請求都會創(chuàng)建一個新的Bean實例,該Bean實例僅在當前請求內有效。

4.session:會話作用域,每個HTTP會話都會創(chuàng)建一個新的Bean實例,該Bean實例僅在當前會話內有效。

5.application:全局作用域,一個bean 定義對應于單個ServletContext 的生命周期。

6.websocket: HTTP WebSocket 作用域,一個bean 定義對應于單個websocket 的生命周期。

選擇適當?shù)淖饔糜蚩梢蕴岣邞贸绦虻男阅芎涂删S護性。

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

下面有兩個用戶張三和李四,張三呢 調用了公共對象,但是張三特意使用了 user2來接收,

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

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

所以當我們使用原型模式時這個問題就解決了

//張三
@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容器中只存在?個實例:獲取Bean(即通過applicationContext.getBean等?法獲?。┘把b配Bean(即通過@Autowired注?)都是同?個對象。

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

備注:Spring默認選擇該作?域

2、prototype(原型作用域)

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

描述:每次對該作?域下的Bean的請求都會創(chuàng)建新的實例:獲取Bean(即通過applicationContext.getBean等?法獲?。┘把b配Bean(即通過@Autowired注?)都是新的對象實例。

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

上圖中,每個引用對應一個新的 bean 實例。

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

3、request(請求作用域)

官?說明: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請求會創(chuàng)建新的Bean實例,類似于prototype

場景:?次http的請求和響應的共享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.

描述:在?個http session中,定義?個Bean實例

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

備注:限定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.

描述:在?個http servlet Context中,定義?個Bean實例

場景:Web應?的上下?信息,?如:記錄?個應?的共享信息

備注:限定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.

描述:在?個HTTP WebSocket的?命周期中,定義?個Bean實例

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

備注:限定Spring WebSocket中使?

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

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

三、設置作用域

singleton 作用域是 Spring 中默認的作用域,

使? @Scope 標簽就可以?來聲明 Bean 的作?域,?如設置 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 標簽既可以修飾?法也可以修飾類,@Scope 有兩種設置?式:

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

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

以上就是Spring Bean中的六種作用域你了解嗎的詳細內容,更多關于Bean作用域的資料請關注腳本之家其它相關文章!

相關文章

  • Mybatis利用分頁插件PageHelper快速實現(xiàn)分頁查詢

    Mybatis利用分頁插件PageHelper快速實現(xiàn)分頁查詢

    如果你也在用MyBatis,建議嘗試該分頁插件,這一定是最方便使用的分頁插件,這篇文章主要給大家介紹了關于Mybatis利用分頁插件PageHelper快速實現(xiàn)分頁查詢的相關資料,PageHelper是一個Mybatis的分頁插件,負責將已經(jīng)寫好的sql語句,進行分頁加工,需要的朋友可以參考下
    2021-08-08
  • Java泛型變量如何添加約束

    Java泛型變量如何添加約束

    這篇文章主要介紹了Java泛型變量如何添加約束,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Spring依賴注入的幾種方式分享梳理總結

    Spring依賴注入的幾種方式分享梳理總結

    這篇文章主要介紹了Spring依賴注入的幾種方式分享梳理總結,文章圍繞主題展開詳細,具有一定參考價值,需要的朋友可以參考一下
    2022-07-07
  • 一篇文章帶你了解Java中ThreadPool線程池

    一篇文章帶你了解Java中ThreadPool線程池

    線程池可以控制運行的線程數(shù)量,本文就線程池做了詳細的介紹,需要了解的小伙伴可以參考一下
    2021-08-08
  • 詳解Spring注解驅動開發(fā)之屬性賦值

    詳解Spring注解驅動開發(fā)之屬性賦值

    今天帶大家學習Spring注解驅動開發(fā)的相關知識,文中有非常詳細的代碼示例,對正在學習Java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • java 中內部類的實例詳解

    java 中內部類的實例詳解

    這篇文章主要介紹了java 中內部類的實例詳解的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Java那點兒事之Map集合不為人知的秘密有哪些

    Java那點兒事之Map集合不為人知的秘密有哪些

    Map用于保存具有映射關系的數(shù)據(jù),Map集合里保存著兩組值,一組用于保存Map的key,另一組保存著Map的value,和查字典類似,通過key找到對應的value,通過頁數(shù)找到對應的信息。用學生類來說,key相當于學號,value對應name,age,sex等信息。用這種對應關系方便查找
    2021-10-10
  • Java后端返回PDF預覽給前端的實現(xiàn)

    Java后端返回PDF預覽給前端的實現(xiàn)

    前端要預覽服務器PDF 可直接將要blob流返回給前端,即可用瀏覽器自帶pdf預覽功能打開,本文就來介紹一下如何實現(xiàn),感興趣的可以了解一下
    2023-09-09
  • 詳解SpringBoot 解決攔截器注入Service為空問題

    詳解SpringBoot 解決攔截器注入Service為空問題

    這篇文章主要介紹了詳解SpringBoot 解決攔截器注入Service為空問題的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • SpringBoot使用Redisson實現(xiàn)延遲執(zhí)行的完整示例

    SpringBoot使用Redisson實現(xiàn)延遲執(zhí)行的完整示例

    這篇文章主要介紹了SpringBoot使用Redisson實現(xiàn)延遲執(zhí)行的完整示例,文中通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06

最新評論