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

Spring的三級(jí)緩存解決循環(huán)依賴(lài)問(wèn)題

 更新時(shí)間:2025年06月09日 08:48:14   作者:我的城市沒(méi)有海~  
這篇文章主要介紹了Spring的三級(jí)緩存解決循環(huán)依賴(lài)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、什么是Spring三級(jí)緩存

  • 第一級(jí)緩存:也叫單例池,存放已經(jīng)經(jīng)歷了完整生命周期的Bean對(duì)象。
  • 第二級(jí)緩存:存放早期暴露出來(lái)的Bean對(duì)象,實(shí)例化以后,就把對(duì)象放到這個(gè)Map中。(Bean可能只經(jīng)過(guò)實(shí)例化,屬性還未填充)。
  • 第三級(jí)緩存:存放早期暴露的Bean的工廠。

注:

只有單例的bean會(huì)通過(guò)三級(jí)緩存提前暴露來(lái)解決循環(huán)依賴(lài)的問(wèn)題,而非單例的bean,每次從容器中獲取都是一個(gè)新的對(duì)象,都會(huì)重新創(chuàng)建,所以非單例的bean是沒(méi)有緩存的,不會(huì)將其放到三級(jí)緩存中。

為了解決第二級(jí)緩存中AOP生成新對(duì)象的問(wèn)題,Spring就提前AOP,比如在加載b的流程中,如果發(fā)送了循環(huán)依賴(lài),b依賴(lài)了a,就要對(duì)a執(zhí)行AOP,提前獲取增強(qiáng)以后的a對(duì)象,這樣b對(duì)象依賴(lài)的a對(duì)象就是增強(qiáng)以后的a了。

二三級(jí)緩存就是為了解決循環(huán)依賴(lài),且之所以是二三級(jí)緩存而不是二級(jí)緩存,主要是可以解決循環(huán)依賴(lài)對(duì)象需要提前被aop代理,以及如果沒(méi)有循環(huán)依賴(lài),早期的bean也不會(huì)真正暴露,不用提前執(zhí)行代理過(guò)程,也不用重復(fù)執(zhí)行代理過(guò)程。

二、對(duì)象在三級(jí)緩存中的創(chuàng)建流程

A依賴(lài)B,B依賴(lài)A

1、A創(chuàng)建過(guò)程中需要B,于是先將A放到三級(jí)緩存,去實(shí)例化B。

2、B實(shí)例化的過(guò)程中發(fā)現(xiàn)需要A,于是B先查一級(jí)緩存尋找A,如果沒(méi)有,再查二級(jí)緩存,如果還沒(méi)有,再查三級(jí)緩存,找到了A,然后把三級(jí)緩存里面的這個(gè)A放到二級(jí)緩存里面,并刪除三級(jí)緩存里面的A。

3、B順利初始化完畢,將自己放到一級(jí)緩存里面(此時(shí)B里面的A依然是創(chuàng)建中的狀態(tài))。然后回來(lái)接著創(chuàng)建A,此時(shí)B已經(jīng)創(chuàng)建結(jié)束,可以直接從一級(jí)緩存里面拿到B,去完成A的創(chuàng)建,并將A放到一級(jí)緩存。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA的發(fā)展前景如何好不好自學(xué)

    JAVA的發(fā)展前景如何好不好自學(xué)

    這篇文章主要介紹了JAVA的發(fā)展前景如何好不好自學(xué),很多朋友想自學(xué)java不知道好不好學(xué),能不能學(xué)會(huì),今天小編給大家分享一篇教程關(guān)于java的發(fā)展前景的文章,需要的朋友可以參考下
    2020-06-06
  • 通過(guò)一個(gè)命令輕松切換Java的版本

    通過(guò)一個(gè)命令輕松切換Java的版本

    這篇文章主要給大家介紹了如何通過(guò)一個(gè)命令輕松實(shí)現(xiàn)切換Java的版本,通過(guò)本文介紹的方法,大家就可以將jdk版本之間輕松切換,需要的朋友可以參考學(xué)習(xí),下面跟著小編一起來(lái)看看吧。
    2017-05-05
  • 全網(wǎng)最深分析SpringBoot MVC自動(dòng)配置失效的原因

    全網(wǎng)最深分析SpringBoot MVC自動(dòng)配置失效的原因

    這篇文章主要介紹了全網(wǎng)最深分析SpringBoot MVC自動(dòng)配置失效的原因,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • mybatis通過(guò)TypeHandler?list轉(zhuǎn)換string類(lèi)型轉(zhuǎn)換方式

    mybatis通過(guò)TypeHandler?list轉(zhuǎn)換string類(lèi)型轉(zhuǎn)換方式

    這篇文章主要介紹了mybatis通過(guò)TypeHandler?list轉(zhuǎn)換string類(lèi)型轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot+Vue項(xiàng)目部署實(shí)現(xiàn)傳統(tǒng)方式

    SpringBoot+Vue項(xiàng)目部署實(shí)現(xiàn)傳統(tǒng)方式

    我們?cè)谶M(jìn)行前后端分離開(kāi)發(fā)的時(shí)候,一般是將前端項(xiàng)目部署到nginx服務(wù)器上,與后端項(xiàng)目分開(kāi)部署,這篇文章主要給大家介紹了關(guān)于SpringBoot+Vue項(xiàng)目部署實(shí)現(xiàn)傳統(tǒng)方式的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • springboot自動(dòng)重連Redis的實(shí)現(xiàn)方法

    springboot自動(dòng)重連Redis的實(shí)現(xiàn)方法

    由于網(wǎng)絡(luò)或服務(wù)器問(wèn)題,Redis連接可能會(huì)斷開(kāi),導(dǎo)致應(yīng)用程序無(wú)法繼續(xù)正常工作,本文主要介紹了springboot自動(dòng)重連Redis的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • SpringBoot中yml多環(huán)境配置的3種方法

    SpringBoot中yml多環(huán)境配置的3種方法

    這篇文章主要給大家介紹了SpringBoot中yml多環(huán)境配置的3種方法,文中有詳細(xì)的代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-10-10
  • java sftp下載文件報(bào)錯(cuò)Caused by:com.jcraft.jsch.JSchException:session is down問(wèn)題

    java sftp下載文件報(bào)錯(cuò)Caused by:com.jcraft.jsch.JSchExcep

    文章講述了作者在日常工作中遇到的JSch連接問(wèn)題,經(jīng)過(guò)分析發(fā)現(xiàn)是由于連接泄露導(dǎo)致的,作者提出了解決方案,并給出了使用建議:1.在finally代碼塊中關(guān)閉連接;2.在真正使用階段再創(chuàng)建連接,避免創(chuàng)建后不使用又忘記關(guān)閉連接
    2024-11-11
  • java使用觀察者模式異步短信/郵箱提醒用戶群

    java使用觀察者模式異步短信/郵箱提醒用戶群

    這篇文章主要為大家詳細(xì)介紹了java使用觀察者模式異步短信和郵箱提醒用戶群,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Java數(shù)據(jù)庫(kù)連接池c3p0過(guò)程解析

    Java數(shù)據(jù)庫(kù)連接池c3p0過(guò)程解析

    這篇文章主要介紹了Java數(shù)據(jù)庫(kù)連接池c3p0過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論