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

Spring 是如何解決循環(huán)依賴問題的?

這篇具有很好參考價值的文章主要介紹了Spring 是如何解決循環(huán)依賴問題的?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

項目場景:

提示:這里簡述項目相關(guān)背景:

例如:項目場景:示例:通過藍(lán)牙芯片(HC-05)與手機 APP 通信,每隔 5s 傳輸一批傳感器數(shù)據(jù)(不是很大)


問題描述

????????我們都知道,如果在代碼中,將兩個或多個 Bean 互相之間持有對方的引用就會發(fā)生循環(huán)依賴。循環(huán)的依賴將會導(dǎo)致注入死循環(huán),這是 Spring 發(fā)生循環(huán)依賴的原因。

????????循環(huán)依賴有三種形態(tài):

????????????????第一種,互相依賴:A 依賴 B,B 又依賴 A,它們之間形成了循環(huán)依賴。

Spring 是如何解決循環(huán)依賴問題的?,Spring,java

?????????????????第二種,三者間依賴:A 依賴 B,B 依賴 C,C 又依賴 A,形成了循環(huán)依賴。

Spring 是如何解決循環(huán)依賴問題的?,Spring,java

?

????????????????第三種,自我依賴:A 依賴 A 形成了循環(huán)依賴。

? ? ? ? ? ? ? ? ? ?Spring 是如何解決循環(huán)依賴問題的?,Spring,java


問題解決:

????????Spring 中設(shè)計了三級緩存來解決循環(huán)依賴問題,當(dāng)我們?nèi)フ{(diào)用 getBean()方法的時候,Spring 會先從一級緩存中去找到目標(biāo) Bean,如果發(fā)現(xiàn)一級緩存中沒有便會去二級緩存中去找,而如果一、二級緩存中都沒有找到,意味著該目標(biāo) Bean 還沒有實例化。

????????于是,Spring 容器會實例化目標(biāo) Bean(PS:剛初始化的 Bean 稱為早期 Bean) 。然 后,將目標(biāo) Bean 放入到二級緩存中,同時,加上標(biāo)記是否存在循環(huán)依賴。如果不存在循環(huán)依賴,便會將目標(biāo) Bean 存入到二級緩存,否則,便會標(biāo)記該 Bean 存在循環(huán)依賴, 然后將等待下一次輪詢賦值,也就是解析@Autowired 注解。等@Autowired 注解賦值完成后(PS:完成賦值的 Bean 稱為成熟 Bean) ,會將目標(biāo) Bean 存入到一級緩存。

????????這里可以做個總結(jié),我們來看這張圖。Spring 一級緩存中存放所有的成熟 Bean, 二級緩存中存放所有的早期 Bean,先取一級緩存,再去二級緩存。?

Spring 是如何解決循環(huán)依賴問題的?,Spring,java

?


問題擴(kuò)展

? ? ? ? 那么,前面有提到三級緩存,三級緩存的作用是什么?
????????回答:三級緩存是用來存儲代理 Bean,當(dāng)調(diào)用 getBean()方法時,發(fā)現(xiàn)目標(biāo) Bean 需要通過代理工廠來創(chuàng)建,此時會將創(chuàng)建好的實例保存到三級緩存,最終也會將賦值好的 Bean 同步到一級緩存中。

????????Spring 中哪些情況下,不能解決循環(huán)依賴問題?

?????????1、多例 Bean 通過 setter 注入的情況,不能解決循環(huán)依賴問題

? ? ? ? ?2、構(gòu)造器注入的 Bean 的情況,不能解決循環(huán)依賴問題

? ? ? ? ?3、單例的代理 Bean 通過 Setter 注入的情況,不能解決循環(huán)依賴問題

? ? ? ? ?4、設(shè)置了@DependsOn 的 Bean 的情況,不能解決循環(huán)依賴問題文章來源地址http://www.zghlxwxcb.cn/news/detail-642033.html

到了這里,關(guān)于Spring 是如何解決循環(huán)依賴問題的?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Spring 是如何解決循環(huán)依賴的

    Spring 是如何解決循環(huán)依賴的

    1.什么是循環(huán)依賴? 所謂的循環(huán)依賴是指,A 依賴 B,B 又依賴 A,它們之間形成了循環(huán)依賴?;蛘呤?A 依賴 B,B 依賴 C,C 又依賴 A。它們之間的依賴關(guān)系如下: 2.通過手寫代碼演示理解Spring循環(huán)依賴 DEMO: 為什么需要二級緩存? 一級緩存和二級緩存相比: 二級緩存只要是為了分

    2024年02月03日
    瀏覽(19)
  • 深談Spring如何解決Bean的循環(huán)依賴

    Java循環(huán)依賴指的是兩個或多個類之間的相互依賴,形成了一個循環(huán)的依賴關(guān)系,這會導(dǎo)致程序編譯失敗或運行時出現(xiàn)異常。下面小岳就帶大家來詳細(xì)分析下Java循環(huán)依賴。 簡單來講就是:假設(shè)有兩個人是:A和B, A想要向B借錢,但B需要先向A借錢。 這種情況就形成了循環(huán)依賴

    2023年04月17日
    瀏覽(24)
  • Spring中的循環(huán)依賴是什么?如何解決它?

    循環(huán)依賴是指兩個或多個Bean之間相互依賴,導(dǎo)致它們無法被正確地初始化。在Spring中,當(dāng)兩個或多個Bean之間存在循環(huán)依賴時,Spring容器無法決定哪個Bean應(yīng)該先初始化,因此會拋出BeanCurrentlyInCreationException異常,從而導(dǎo)致應(yīng)用程序啟動失敗。 ??為了解決循環(huán)依賴問題,Spr

    2023年04月16日
    瀏覽(49)
  • spring工程的啟動流程?bean的生命周期?提供哪些擴(kuò)展點?管理事務(wù)?解決循環(huán)依賴問題的?事務(wù)傳播行為有哪些?

    spring工程的啟動流程?bean的生命周期?提供哪些擴(kuò)展點?管理事務(wù)?解決循環(huán)依賴問題的?事務(wù)傳播行為有哪些?

    Spring工程的啟動流程主要包括以下幾個步驟: 加載配置文件:Spring會讀取配置文件(如XML配置文件或注解配置)來獲取應(yīng)用程序的配置信息。 實例化并初始化IoC容器:Spring會創(chuàng)建并初始化IoC容器,即ApplicationContext。在這一步,Spring會解析配置文件,并將配置的Bean實例化。

    2024年02月12日
    瀏覽(33)
  • spring 的循環(huán)依賴以及spring為什么要用三級緩存解決循環(huán)依賴

    spring 的循環(huán)依賴以及spring為什么要用三級緩存解決循環(huán)依賴

    ??????? bean的生命周期 ??????? 這里簡單過一下 class -無參構(gòu)造 -普通對象 -依賴注入(對加了autowire等的屬性賦值) -初始化前-初始化 -初始化后(aop) -放入單例池的map(一級緩存) -bean對象 這里提一點單例bean單例bean 其實就是用mapbeanName,Bean對象創(chuàng)建的,多例bean就不

    2024年02月15日
    瀏覽(24)
  • Spring解決循環(huán)依賴

    Spring解決循環(huán)依賴

    目錄 什么是spring循環(huán)依賴 什么情況下循環(huán)依賴可以被處理? spring?如何解決循環(huán)依賴 創(chuàng)建A這個Bean的流程 答疑 疑問:在給B注入的時候為什么要注入一個代理對象? 初始化的時候是對A對象本身進(jìn)行初始化,而容器中以及注入到B中的都是代理對象,這樣不會有問題嗎? 三級

    2024年02月22日
    瀏覽(24)
  • (循環(huán)依賴問題)學(xué)習(xí)spring的第九天

    (循環(huán)依賴問題)學(xué)習(xí)spring的第九天

    ?Bean實例的屬性填充 ?Spring在屬性注入時 , 分為如下幾種情況 : 注入單向?qū)ο笠?: 如usersevice里注入userdao , userdao里沒有注入其他屬性 ?? ?注入雙向?qū)ο笠?: 如usersevice里注入userdao , userdao也注入usersevice屬性? (搞清原理即可) 問題提出 : 形成死循環(huán) 解決問題 : 三級緩存解決

    2024年01月22日
    瀏覽(20)
  • 三級緩存---解決 Spring 循環(huán)依賴

    三級緩存---解決 Spring 循環(huán)依賴

    首先,什么是循環(huán)依賴?這個其實好理解,就是兩個 Bean 互相依賴,類似下面這樣: \\\"\\\"\\\" \\\"\\\"\\\" AService 和 BService 互相依賴: 一般來說,循環(huán)依賴有三種不同的形態(tài),上面就是其中一種。 另外兩種分別是三者依賴,如下圖: 這種循環(huán)依賴一般隱藏比較深,不易發(fā)覺。 還有自我依

    2024年02月16日
    瀏覽(23)
  • spring解決循環(huán)依賴的三級緩存

    實例化,對應(yīng)方法:AbstractAutowireCapableBeanFactory中的createBeanInstance方法,簡單理解就是new了一個對象。 屬性注入,對應(yīng)方法:AbstractAutowireCapableBeanFactory的populateBean方法,為實例化中new出來的對象填充屬性和注入依賴。 初始化,對應(yīng)方法:AbstractAutowireCapableBeanFactory的initialize

    2024年02月03日
    瀏覽(24)
  • Spring 怎么解決循環(huán)依賴的呢?

    Spring 怎么解決循環(huán)依賴的呢?

    Spring 循環(huán)依賴:簡單說就是自己依賴自己,或者和別的 Bean 相互依賴。 只有單例的 Bean 才存在循環(huán)依賴的情況, 原型 (Prototype)情況下,Spring 會直接拋出異常。原因很簡單,AB 循環(huán)依賴,A 實例化的時候,發(fā)現(xiàn)依賴 B,創(chuàng)建 B 實例,創(chuàng)建 B 的時候發(fā)現(xiàn)需要 A,創(chuàng)建 A1 實例……

    2024年02月09日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包