教你Spring如何使用三級緩存解決循環(huán)依賴
一級緩存存放實(shí)例化對象 。二級緩存存放已經(jīng)在內(nèi)存空間創(chuàng)建好但是還沒有給屬性賦值的對象。三級緩存存放對象工廠,用來創(chuàng)建提前暴露到bean的對象。
@Service
public class TestService1 {
@Autowired
private TestService2 testService2;
public void test1() {
}
}
@Service
public class TestService2 {
@Autowired
private TestService1 testService1;
public void test2() {
}
}
testService1先去一級緩存看有沒有實(shí)例,發(fā)現(xiàn)沒有,繼續(xù)去二級緩存查看,發(fā)現(xiàn)沒有,去三級緩存查看,發(fā)現(xiàn)沒有實(shí)例就創(chuàng)建實(shí)例,在創(chuàng)建的過程中,提前暴露,添加到三級緩存里。
這個(gè)時(shí)候進(jìn)行屬性賦值,發(fā)現(xiàn)還有一個(gè)testService2,它沒有賦值,是一個(gè)空的,就從一級緩存中去看testSerivce2有沒有實(shí)例,發(fā)現(xiàn)沒有,去二級查看發(fā)現(xiàn)沒有,去三級緩存查看,發(fā)現(xiàn)沒有,就創(chuàng)建實(shí)例,也提前暴露,添加到三級緩存里面。
這個(gè)時(shí)候testSerivce2對象里面發(fā)現(xiàn)testService1里面沒有賦值,然后對testService1進(jìn)行賦值,從一級緩存去查看,發(fā)現(xiàn)沒有,去二級查看,發(fā)現(xiàn)沒有,去三級查看,發(fā)現(xiàn)有,就把實(shí)例testService1從三級緩存添加到二級緩存里面,把實(shí)例testService1三級緩存的實(shí)例刪除,這個(gè)時(shí)候,testService2里面有實(shí)例對象,對象里面的testService1也有值了,就是一個(gè)可以使用的實(shí)例對象了,就把這個(gè)對象移動(dòng)到一級緩存里面,把三級緩存里面的testService2刪除。
這個(gè)時(shí)候testService1里面的testService2屬性就可以從一級緩存里面獲取這個(gè)testService2實(shí)例了,把它進(jìn)行賦值填充,testService1也完成了實(shí)例化,把testService1從二級緩存移動(dòng)到一級緩存里面,把testService1在二級緩存的實(shí)例也刪除。

到此這篇關(guān)于Spring使用三級緩存解決循環(huán)依賴的過程】的文章就介紹到這了,更多相關(guān)Spring三級緩存解決循環(huán)依賴內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC中RequestBody注解的List參數(shù)傳遞方式
這篇文章主要介紹了SpringMVC中RequestBody注解的List參數(shù)傳遞方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
簡單談?wù)刯ava中final,finally,finalize的區(qū)別
Java中final、finally、finalize的區(qū)別與用法,困擾了不少學(xué)習(xí)者,下面我們就這個(gè)問題進(jìn)行一些探討,希望對大家的學(xué)習(xí)有所幫助。2016-05-05
SpringBoot實(shí)現(xiàn)Word轉(zhuǎn)PDF和TXT的實(shí)踐分享
研發(fā)工作中難免會遇到一些奇奇怪怪的需求,就比如最近,客戶提了個(gè)新需求:上傳一個(gè)WORD文檔,要求通過系統(tǒng)把該文檔轉(zhuǎn)換成PDF和TXT,所以本文給大家分享了SpringBoot實(shí)現(xiàn)Word轉(zhuǎn)PDF和TXT的實(shí)踐,感興趣的朋友可以參考下2024-08-08
Java線程池并發(fā)執(zhí)行多個(gè)任務(wù)方式
這篇文章主要介紹了Java線程池并發(fā)執(zhí)行多個(gè)任務(wù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
Spring中獲取Bean對象的三種注入方式與兩種注入方法詳解
平常的Java開發(fā)中程序員在某個(gè)類中需要依賴其它類的方法,下面這篇文章主要給大家介紹了關(guān)于Spring中獲取Bean對象的三種注入方式與兩種注入方法的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
springboot集成fastDfs過程代碼實(shí)例
這篇文章主要介紹了springboot集成fastDfs過程代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12

