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

Spring bean為什么默認(rèn)是單例

 更新時(shí)間:2020年08月27日 10:06:08   作者:云淡風(fēng)輕博客  
這篇文章主要介紹了Spring bean為什么默認(rèn)是單例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

熟悉Spring開發(fā)的朋友都知道Spring提供了5種scope分別是singleton、prototype、request、session、global session。

如下圖是官方文檔上的截圖,感興趣的朋友可以進(jìn)去看看這五種分別有什么不同。今天要介紹的是這五種中的前兩種,也是Spring最初提供的bean scope singleton 和 prototype。

Spring官方文檔介紹如下圖:

更多內(nèi)容可以看官方文檔介紹,非常詳細(xì):

https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html

一、單例bean與原型bean的區(qū)別

如果一個(gè)bean被聲明為單例的時(shí)候,在處理多次請(qǐng)求的時(shí)候在Spring容器里只實(shí)例化出一個(gè)bean,后續(xù)的請(qǐng)求都公用這個(gè)對(duì)象,這個(gè)對(duì)象會(huì)保存在一個(gè)map里面。當(dāng)有請(qǐng)求來的時(shí)候會(huì)先從緩存(map)里查看有沒有,有的話直接使用這個(gè)對(duì)象,沒有的話才實(shí)例化一個(gè)新的對(duì)象,所以這是個(gè)單例的。但是對(duì)于原型(prototype)bean來說當(dāng)每次請(qǐng)求來的時(shí)候直接實(shí)例化新的bean,沒有緩存以及從緩存查的過程。

1、畫圖分析

2、源碼分析

生成bean時(shí)先判斷單例的還是原型的

如果是單例的則先嘗試從緩存里獲取,沒有在新創(chuàng)建

結(jié)論:

單例的bean只有第一次創(chuàng)建新的bean 后面都會(huì)復(fù)用該bean,所以不會(huì)頻繁創(chuàng)建對(duì)象原型的bean每次都會(huì)新創(chuàng)建

二、單例bean的優(yōu)勢(shì)

由于不會(huì)每次都新創(chuàng)建新對(duì)象所以有一下幾個(gè)性能上的優(yōu)勢(shì)。

1、減少了新生成實(shí)例的消耗

新生成實(shí)例消耗包括兩方面,第一,spring會(huì)通過反射或者cglib來生成bean實(shí)例這都是耗性能的操作,其次給對(duì)象分配內(nèi)存也會(huì)涉及復(fù)雜算法。

2、減少jvm垃圾回收

由于不會(huì)給每個(gè)請(qǐng)求都新生成bean實(shí)例,所以自然回收的對(duì)象少了。

3、可以快速獲取到bean

因?yàn)閱卫墨@取bean操作除了第一次生成之外其余的都是從緩存里獲取的所以很快。

三、單例bean的劣勢(shì)

單例的bean一個(gè)很大的劣勢(shì)就是他不能做到線程安全!由于所有請(qǐng)求都共享一個(gè)bean實(shí)例,所以這個(gè)bean要是有狀態(tài)的一個(gè)bean的話可能在并發(fā)場(chǎng)景下出現(xiàn)問題,而原型的bean則不會(huì)有這樣問題(但也有例外,比如他被單例bean依賴),因?yàn)榻o每個(gè)請(qǐng)求都新創(chuàng)建實(shí)例。

四、總結(jié)

1、Spring 為啥把bean默認(rèn)設(shè)計(jì)成單例?為了提高性能少創(chuàng)建實(shí)例垃圾回收緩存快速獲取

2、單例有啥劣勢(shì)?

如果是有狀態(tài)的話在并發(fā)環(huán)境下線程不安全

3、什么是有狀態(tài)對(duì)象?什么是無狀態(tài)對(duì)象?有狀態(tài)對(duì)象:有實(shí)例變量可以標(biāo)志其對(duì)象所處的狀態(tài)。(有實(shí)例變量的對(duì)象,有存儲(chǔ)數(shù)據(jù)能力)- 白話:有屬性的對(duì)象無狀態(tài)對(duì)象:無實(shí)例變量可以標(biāo)志其對(duì)象所處的狀態(tài)。(無實(shí)例變量的對(duì)象,無存儲(chǔ)數(shù)據(jù)能力)- 白話:無屬性的對(duì)象

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

相關(guān)文章

  • Spring實(shí)戰(zhàn)之容器中的工程Bean用法示例

    Spring實(shí)戰(zhàn)之容器中的工程Bean用法示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之容器中的工程Bean用法,結(jié)合實(shí)例形式分析了Sring框架容器中的工程Bean相關(guān)配置、使用操作技巧,需要的朋友可以參考下
    2019-11-11
  • java調(diào)用文心一言API的方法實(shí)現(xiàn)過程

    java調(diào)用文心一言API的方法實(shí)現(xiàn)過程

    Java是一種廣泛使用的編程語言,用于開發(fā)各種應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于java調(diào)用文心一言API的方法實(shí)現(xiàn),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Java中使用同步回調(diào)和異步回調(diào)的示例詳解

    Java中使用同步回調(diào)和異步回調(diào)的示例詳解

    這篇文章主要介紹了Java中使用同步回調(diào)和異步回調(diào)的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • IDEA設(shè)置JVM運(yùn)行參數(shù)的方法步驟

    IDEA設(shè)置JVM運(yùn)行參數(shù)的方法步驟

    這篇文章主要介紹了IDEA設(shè)置JVM運(yùn)行參數(shù)的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 詳細(xì)總結(jié)Java組合模式

    詳細(xì)總結(jié)Java組合模式

    今天帶大家了解Java設(shè)計(jì)模式中的組合模式,下文中對(duì)組合模式介紹的非常詳細(xì),還有相關(guān)代碼,對(duì)正在學(xué)習(xí)Java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • springboot+Quartz實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼

    springboot+Quartz實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼

    本篇文章主要介紹了springboot + Quartz 實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • Jax-rs規(guī)范REST接口文件上傳代碼實(shí)例

    Jax-rs規(guī)范REST接口文件上傳代碼實(shí)例

    這篇文章主要介紹了Jax-rs規(guī)范REST接口文件上傳代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 淺談java中的對(duì)象、類、與方法的重載

    淺談java中的對(duì)象、類、與方法的重載

    本文主要對(duì)java中的對(duì)象、類、與方法的重載進(jìn)行簡(jiǎn)要概述,具有一定的參考價(jià)值,需要的朋友一起來看下吧
    2016-12-12
  • 在Java中將jsonObject轉(zhuǎn)換成對(duì)象的實(shí)現(xiàn)方法

    在Java中將jsonObject轉(zhuǎn)換成對(duì)象的實(shí)現(xiàn)方法

    在現(xiàn)代的Web開發(fā)中,JSON作為一種輕量級(jí)的數(shù)據(jù)交換格式,因其易讀性和易于解析的特點(diǎn)而被廣泛使用,本文將介紹如何在Java中將??jsonObject??轉(zhuǎn)換成Java對(duì)象,主要通過使用Gson庫來實(shí)現(xiàn)這一功能,需要的朋友可以參考下
    2025-04-04
  • Spring MVC實(shí)現(xiàn)mysql數(shù)據(jù)庫增刪改查完整實(shí)例

    Spring MVC實(shí)現(xiàn)mysql數(shù)據(jù)庫增刪改查完整實(shí)例

    這篇文章主要介紹了Spring MVC實(shí)現(xiàn)mysql數(shù)據(jù)庫增刪改查完整實(shí)例,從創(chuàng)建一個(gè)web項(xiàng)目開始,分享了項(xiàng)目結(jié)構(gòu)以及具體Java代碼和前端頁面等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以了解下。
    2017-12-12

最新評(píng)論

阳东县| 昭通市| 孝昌县| 永宁县| 怀柔区| 北京市| 镇雄县| 田阳县| 枣庄市| 永济市| 周至县| 文登市| 朔州市| 易门县| 青岛市| 泰和县| 房产| 昂仁县| 英山县| 双鸭山市| 修水县| 大庆市| 英吉沙县| 富蕴县| 基隆市| 永定县| 额敏县| 彩票| 沙洋县| 昌吉市| 邵阳市| 宁德市| 灵山县| 漳州市| 内江市| 南宫市| 湘潭县| 雷山县| 勃利县| 仙居县| 清流县|