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

Java Spring循環(huán)依賴原理與bean的生命周期圖文案例詳解

 更新時(shí)間:2021年09月02日 08:36:37   作者:liangsheng_g  
這篇文章主要介紹了Spring循環(huán)依賴原理與bean的生命周期圖文案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

前言

Spring是如何處理循環(huán)依賴的,又是怎么做到,互相注入對(duì)方的proxy bean而不是raw bean的?現(xiàn)在就分析一下

一、循環(huán)依賴是什么

Spring中放入兩個(gè)Service,分別是C1和C2,然后C1和C2又互為對(duì)方的成員變量。這種情況C1和C2就可以說(shuō)是相互循環(huán)依賴了

二、源碼圖解

1. bean的主要生命周期圖解

在這里插入圖片描述

上圖是一個(gè)沒(méi)有循壞依賴的bean的主要生命周期節(jié)點(diǎn),下圖的循壞依賴可以結(jié)合該圖解一起看

2.循環(huán)依賴圖解

在這里插入圖片描述

可以看到里面有一個(gè)很重要的邏輯:

當(dāng)一個(gè)bean經(jīng)過(guò)所有的步驟之后,會(huì)去三個(gè)緩存里的二級(jí)緩存根據(jù)beanName獲取對(duì)象。

  1. 如果拿不到,就直接使用initializeBean方法之后生成的bean,然后放入到spring容器中
  2. 如果拿得到,就要對(duì)比執(zhí)行initializeBean前后的bean,如果bean相同,就用二級(jí)緩存里的對(duì)象作為bean放入到spring容器中,否則就報(bào)錯(cuò)
  3. 所以spring3個(gè)緩存中,二級(jí)緩存存在的意義就是判斷該bean是否被循環(huán)依賴過(guò),只有被循環(huán)依賴了,注入到其他bean的屬性里了,才會(huì)放入到二級(jí)緩存。
  4. 然后最后的判斷,判斷initializeBean方法執(zhí)行前后對(duì)象是否一致,其實(shí)就是為了判斷被循環(huán)依賴的bean在注入到其他bean和自己走完bean生命周期的是不是同一個(gè)object,如果不是同一個(gè)object,那就有問(wèn)題,要報(bào)錯(cuò)。

在這里插入圖片描述

可以看到此處第二個(gè)參數(shù)allEarlyReference,這個(gè)參數(shù)就是用來(lái)區(qū)分從3個(gè)緩存里取bean的時(shí)候是否需要到3級(jí)緩存里取對(duì)象,此處為false,所以截止到2級(jí)為止。

3. 循環(huán)依賴處理完成之后

在這里插入圖片描述

直接從Spring容器里拿的是c1 proxy或者c2 proxy,但是其實(shí)在屬性注入的時(shí)候,都是調(diào)用的raw對(duì)象的set方法,也就是proxy的target調(diào)用的set方法。

總結(jié)

循環(huán)依賴其實(shí)耐下功夫讀源碼,也沒(méi)有那么難。下次分享為什么循環(huán)依賴的其中一個(gè)類添加@Async有可能會(huì)導(dǎo)致注入失敗而拋異常

到此這篇關(guān)于Spring循環(huán)依賴原理與bean的生命周期圖文案例詳解的文章就介紹到這了,更多相關(guān)Spring循環(huán)依賴原理與bean的生命周期內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的延遲隊(duì)列DelayQueue源碼解析

    Java中的延遲隊(duì)列DelayQueue源碼解析

    這篇文章主要介紹了Java中的延遲隊(duì)列DelayQueue源碼解析,DelayQueue是一個(gè)支持并發(fā)的無(wú)界延遲隊(duì)列,隊(duì)列中的每個(gè)元素都有個(gè)預(yù)定時(shí)間,當(dāng)線程從隊(duì)列獲取元素時(shí),只有到期元素才會(huì)出隊(duì)列,沒(méi)有到期元素則阻塞等待,需要的朋友可以參考下
    2023-12-12
  • JAVA中方法的聲明及使用方式(繼承、多態(tài)、封裝)

    JAVA中方法的聲明及使用方式(繼承、多態(tài)、封裝)

    這篇文章主要介紹了JAVA中方法的聲明及使用方式(繼承、多態(tài)、封裝),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Springboot集成mybatis與jsp過(guò)程詳解

    Springboot集成mybatis與jsp過(guò)程詳解

    這篇文章主要介紹了Springboot集成mybatis與jsp過(guò)程,Spring Boot是一種全新的框架(相對(duì)而言),是用來(lái)簡(jiǎn)化Spring應(yīng)用的初始搭建以及開發(fā)過(guò)程。該框架使用了特定的方式來(lái)進(jìn)行配置
    2021-09-09
  • Java中對(duì)象序列化與反序列化詳解

    Java中對(duì)象序列化與反序列化詳解

    這篇文章主要介紹了Java中對(duì)象序列化與反序列化,較為詳細(xì)的分析了java中對(duì)象序列化的概念、原理、實(shí)現(xiàn)方法及相關(guān)注意事項(xiàng),具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • SpringBootAdmin+actuator實(shí)現(xiàn)服務(wù)監(jiān)控

    SpringBootAdmin+actuator實(shí)現(xiàn)服務(wù)監(jiān)控

    這篇文章主要為大家詳細(xì)介紹了SpringBootAdmin+actuator實(shí)現(xiàn)服務(wù)監(jiān)控,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 帶你用Java方法輕松實(shí)現(xiàn)樹的同構(gòu)

    帶你用Java方法輕松實(shí)現(xiàn)樹的同構(gòu)

    給定兩棵樹T1和T2。如果T1可以通過(guò)若干次左右孩子互換就變成T2,則我們稱兩棵樹是“同構(gòu)”的。例如圖1給出的兩棵樹就是同構(gòu)的,因?yàn)槲覀儼哑渲幸豢脴涞慕Y(jié)點(diǎn)A、B、G的左右孩子互換后,就得到另外一棵樹
    2021-06-06
  • SPFA算法的實(shí)現(xiàn)原理及其應(yīng)用詳解

    SPFA算法的實(shí)現(xiàn)原理及其應(yīng)用詳解

    SPFA算法,全稱為Shortest?Path?Faster?Algorithm,是求解單源最短路徑問(wèn)題的一種常用算法,本文就來(lái)聊聊它的實(shí)現(xiàn)原理與簡(jiǎn)單應(yīng)用吧
    2023-05-05
  • java中stream去重的幾種方式舉例

    java中stream去重的幾種方式舉例

    Stream流是數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組等)所生成的元素序列,這篇文章主要給大家介紹了關(guān)于java中stream去重的幾種方式,需要的朋友可以參考下
    2023-07-07
  • SpringBoot集成WebSocket實(shí)現(xiàn)前后端消息互傳的方法

    SpringBoot集成WebSocket實(shí)現(xiàn)前后端消息互傳的方法

    這篇文章主要介紹了SpringBoot集成WebSocket實(shí)現(xiàn)前后端消息互傳的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • MyBatis自定義typeHandler的完整實(shí)例

    MyBatis自定義typeHandler的完整實(shí)例

    這篇文章主要給大家介紹了關(guān)于MyBatis自定義typeHandler的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MyBatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論