国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Bean 的六種作用域

這篇具有很好參考價(jià)值的文章主要介紹了Bean 的六種作用域。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Bean 的六種作用域,spring,java,spring?

目錄

一、作用域是什么?

1、singleton(單例作用域)

2、prototype(原型作用域)

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

4、session(回話作用域)

5、application(全局作用域)

6、websocket( HTTP WebSocket 作用域)

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

三、設(shè)置作用域

一、作用域是什么?

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

  1. ?singleton:?jiǎn)卫饔糜颍袑?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è)例子來(lái)解釋Bean的作用域:你和別人一起協(xié)同開(kāi)發(fā)的代碼中有個(gè)Bean不想別人改動(dòng),那就可以通過(guò)調(diào)整Bean的作用域來(lái)解決.

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

此時(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è)問(wèn)題就解決了

//張三
@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(單例作用域)

  • 官?說(shuō)明:(Default) Scopes a single bean definition to a single object instance for each Spring IoC container.
  • 描述:該作?域下的Bean在IoC容器中只存在?個(gè)實(shí)例:獲取Bean(即通過(guò)applicationContext.getBean等?法獲?。┘把b配Bean(即通過(guò)@Autowired注?)都是同?個(gè)對(duì)象。
  • 場(chǎng)景:通常?狀態(tài)的Bean使?該作?域。?狀態(tài)表示Bean對(duì)象的屬性狀態(tài)不需要更新
  • ?備注:Spring默認(rèn)選擇該作?域

2、prototype(原型作用域)

  • 官?說(shuō)明:Scopes a single bean definition to any number of object instances.
  • 描述:每次對(duì)該作?域下的Bean的請(qǐng)求都會(huì)創(chuàng)建新的實(shí)例:獲取Bean(即通過(guò)applicationContext.getBean等?法獲?。┘把b配Bean(即通過(guò)@Autowired注?)都是新的對(duì)象實(shí)例。
  • 場(chǎng)景:通常有狀態(tài)的Bean使?該作?域

Bean 的六種作用域,spring,java,spring

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

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

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

  • 官?說(shuō)明: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
  • 場(chǎng)景:?次http的請(qǐng)求和響應(yīng)的共享Bean
  • 備注:限定SpringMVC中使?

4、session(回話作用域)

  • 官?說(shuō)明: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í)例
  • 場(chǎng)景:?戶回話的共享Bean, ?如:記錄?個(gè)?戶的登陸信息
  • 備注:限定SpringMVC中使?

5、application(全局作用域)

  • 官?說(shuō)明: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í)例
  • 場(chǎng)景:Web應(yīng)?的上下?信息,?如:記錄?個(gè)應(yīng)?的共享信息
  • 備注:限定SpringMVC中使?

6、websocket( HTTP WebSocket 作用域)

  • 官?說(shuō)明: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í)例
  • 場(chǎng)景:WebSocket的每次會(huì)話中,保存了?個(gè)Map結(jié)構(gòu)的頭信息,將?來(lái)包裹客戶端消息頭。第?次初始化后,直到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)簽就可以?來(lái)聲明 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)

?Bean 的六種作用域,spring,java,spring文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-694643.html

到了這里,關(guān)于Bean 的六種作用域的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python中的六種基本數(shù)據(jù)類型

    Python中分為六種基本數(shù)據(jù)類型 不可變類型(又叫靜態(tài)數(shù)據(jù)類型,沒(méi)有增刪改操作):數(shù)字(number)、字符串(string)、元組(tuple) 可變類型(又叫動(dòng)態(tài)數(shù)據(jù)類型,支持增刪改操作):列表(list)、字典(dictionary)、集合(set) 1. 數(shù)字類型(numbers): 數(shù)字類型下還可分為整數(shù)(int)、浮點(diǎn)數(shù)(f

    2024年02月04日
    瀏覽(25)
  • 【SpringMVC]獲取參數(shù)的六種方式

    【SpringMVC]獲取參數(shù)的六種方式

    目錄 1.通過(guò)ServletAPI獲取 2.通過(guò)控制器方法的形參獲取 3.@RequestParam:將請(qǐng)求參數(shù)和控制器方法的形參綁定 4.@RequestHeader:將請(qǐng)求頭信息與控制器方法的形參的值進(jìn)行綁定 5. CookieValue:將cookie數(shù)據(jù)和控制器方法的形參綁定 Cookie: ?編輯 6.通過(guò)控制器方法的實(shí)體類類型的形參獲取

    2024年02月09日
    瀏覽(20)
  • SpringBoot 實(shí)現(xiàn)跨域的六種方式

    目錄 1.通過(guò)SpringSecurity方式配置 2.使用Spring提供的CorsFilter注入Bean(推薦) 3.使用注解@CrossOrigin注解(繁瑣) 4.通過(guò)ResponseBodyAdvice 實(shí)現(xiàn)跨域 5.通過(guò)HttpServletResponse設(shè)置跨域 6.通過(guò)WebMvcConfigurer 實(shí)現(xiàn)跨域 與第5類似

    2024年02月14日
    瀏覽(29)
  • 斐波那契數(shù)列的六種解法

    做這個(gè)問(wèn)題之前,我們需要了解到斐波那契數(shù)列是什么東西?是干什么的? 斐波那契數(shù)列是什么? 一、斐波那契數(shù)列指的是這樣一個(gè)數(shù)列:1、1、2、3、5、8、13、21、…… 這個(gè)數(shù)列從第三項(xiàng)開(kāi)始,每一項(xiàng)都等于前兩項(xiàng)之和。 二、應(yīng)用:通常在個(gè)別股票中不是太準(zhǔn)確,通常在指數(shù)上

    2024年02月08日
    瀏覽(34)
  • uniapp路由跳轉(zhuǎn)的六種方式

    uniapp路由跳轉(zhuǎn)的六種方式

    uniapp官方文檔詳解: 一、uni.navigateTo保留當(dāng)前頁(yè)面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面,使用uni.navigateBack可以返回到原頁(yè)面。 注意: 頁(yè)面跳轉(zhuǎn)路徑有層級(jí)限制,不能無(wú)限制跳轉(zhuǎn)新頁(yè)面 跳轉(zhuǎn)到 tabBar 頁(yè)面只能使用 switchTab 跳轉(zhuǎn) 二、uni.redirectTo關(guān)閉當(dāng)前頁(yè)面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面。

    2024年02月11日
    瀏覽(32)
  • Spring bean定義&Spring Bean 的作用域

    目錄 Spring bean定義 ? Spring配置元數(shù)據(jù) Spring Bean 的作用域 ? singleton作用域: ? 原型作用域: 示例: ? 形成應(yīng)用程序的骨干是由Spring IoC容器所管理的對(duì)象稱為bean。bean被實(shí)例化,組裝,并通過(guò)Spring IoC容器所管理的對(duì)象。這些bean由容器提供,例如,在XML的bean/定義,已經(jīng)看到了

    2024年02月08日
    瀏覽(25)
  • bitmap的六種壓縮方式,Android圖片壓縮

    bitmap的六種壓縮方式,Android圖片壓縮

    Android中圖片是以bitmap形式存在的,那么bitmap所占內(nèi)存,直接影響到了應(yīng)用所占內(nèi)存大小,首先要知道bitmap所占內(nèi)存大小計(jì)算方式: 圖片長(zhǎng)度 x 圖片寬度 x 一個(gè)像素點(diǎn)占用的字節(jié)數(shù) 以下是圖片的壓縮格式: 其中,A代表透明度;R代表紅色;G代表綠色;B代表藍(lán)色。 ALPHA_8 表示

    2024年02月09日
    瀏覽(31)
  • vue組件間傳值的六種方法

    vue組件間傳值的六種方法

    父組件代碼: 子組件代碼: 頁(yè)面顯示: 子組件代碼: 父組件代碼: 頁(yè)面顯示: 父子組件傳值原理:父子組件的關(guān)系可以總結(jié)為 prop 向下傳遞,事件向上傳遞。父組件通過(guò) prop 給子組件下發(fā)數(shù)據(jù),子組件通過(guò)事件給父組件發(fā)送消息,如下圖所示: ref:如果在普通的 DOM 元素

    2024年02月15日
    瀏覽(30)
  • C語(yǔ)言實(shí)現(xiàn)排序算法的六種方式

    1、冒泡法 2、交換法 每次用當(dāng)前的元素一一的同其后的元素 3、選擇法 從數(shù)據(jù)中選擇最小的同第一個(gè)值交換,在從剩下的部分中選擇最小的與第二個(gè)交換,這樣往復(fù)下去 4、插入法 在前面的數(shù)中尋找相應(yīng)的位置插入, 然后繼續(xù)下一張 插入排序就是每一步都將一個(gè)待排數(shù)據(jù)按

    2024年01月25日
    瀏覽(18)
  • 最常見(jiàn)的六種跨域解決方案

    最常見(jiàn)的六種跨域解決方案

    前言:什么是跨域? JSONP CORS 搭建Node代理服務(wù)器 Nginx反向代理 postMessage Websocket 總結(jié) 跨域就是當(dāng)在頁(yè)面上發(fā)送ajax請(qǐng)求時(shí), 由于瀏覽器同源策略的限制,要求當(dāng)前頁(yè)面和服務(wù)端必須同源,也就是協(xié)議、域名和端口號(hào)必須一致 。 如果協(xié)議、域名和端口號(hào)中有其中一個(gè)不一致,

    2024年01月25日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包