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

Spring bean為什么默認是單例

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

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

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

Spring官方文檔介紹如下圖:

更多內容可以看官方文檔介紹,非常詳細:

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

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

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

1、畫圖分析

2、源碼分析

生成bean時先判斷單例的還是原型的

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

結論:

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

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

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

1、減少了新生成實例的消耗

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

2、減少jvm垃圾回收

由于不會給每個請求都新生成bean實例,所以自然回收的對象少了。

3、可以快速獲取到bean

因為單例的獲取bean操作除了第一次生成之外其余的都是從緩存里獲取的所以很快。

三、單例bean的劣勢

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

四、總結

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

2、單例有啥劣勢?

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

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

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

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

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

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

    Java中使用同步回調和異步回調的示例詳解

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

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

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

    詳細總結Java組合模式

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

    springboot+Quartz實現(xiàn)任務調度的示例代碼

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

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

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

    淺談java中的對象、類、與方法的重載

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

    在Java中將jsonObject轉換成對象的實現(xiàn)方法

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

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

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

最新評論

米泉市| 连城县| 礼泉县| 治多县| 保山市| 太保市| 明水县| 江油市| 长兴县| 西乡县| 石家庄市| 南皮县| 湛江市| 合川市| 东莞市| 星座| 阳新县| 滨州市| 宝鸡市| 开原市| 兴海县| 安宁市| 施秉县| 德格县| 兰坪| 岳普湖县| 上杭县| 西城区| 青浦区| 安吉县| 增城市| 行唐县| 武夷山市| 刚察县| 乌拉特中旗| 偃师市| 高碑店市| 万州区| 长阳| 商城县| 小金县|