教你Spring如何使用三級緩存解決循環(huán)依賴
一級緩存存放實例化對象 。二級緩存存放已經(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先去一級緩存看有沒有實例,發(fā)現(xiàn)沒有,繼續(xù)去二級緩存查看,發(fā)現(xiàn)沒有,去三級緩存查看,發(fā)現(xiàn)沒有實例就創(chuàng)建實例,在創(chuàng)建的過程中,提前暴露,添加到三級緩存里。
這個時候進(jìn)行屬性賦值,發(fā)現(xiàn)還有一個testService2,它沒有賦值,是一個空的,就從一級緩存中去看testSerivce2有沒有實例,發(fā)現(xiàn)沒有,去二級查看發(fā)現(xiàn)沒有,去三級緩存查看,發(fā)現(xiàn)沒有,就創(chuàng)建實例,也提前暴露,添加到三級緩存里面。
這個時候testSerivce2對象里面發(fā)現(xiàn)testService1里面沒有賦值,然后對testService1進(jìn)行賦值,從一級緩存去查看,發(fā)現(xiàn)沒有,去二級查看,發(fā)現(xiàn)沒有,去三級查看,發(fā)現(xiàn)有,就把實例testService1從三級緩存添加到二級緩存里面,把實例testService1三級緩存的實例刪除,這個時候,testService2里面有實例對象,對象里面的testService1也有值了,就是一個可以使用的實例對象了,就把這個對象移動到一級緩存里面,把三級緩存里面的testService2刪除。
這個時候testService1里面的testService2屬性就可以從一級緩存里面獲取這個testService2實例了,把它進(jìn)行賦值填充,testService1也完成了實例化,把testService1從二級緩存移動到一級緩存里面,把testService1在二級緩存的實例也刪除。
到此這篇關(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ù)傳遞方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10簡單談?wù)刯ava中final,finally,finalize的區(qū)別
Java中final、finally、finalize的區(qū)別與用法,困擾了不少學(xué)習(xí)者,下面我們就這個問題進(jìn)行一些探討,希望對大家的學(xué)習(xí)有所幫助。2016-05-05SpringBoot實現(xiàn)Word轉(zhuǎn)PDF和TXT的實踐分享
研發(fā)工作中難免會遇到一些奇奇怪怪的需求,就比如最近,客戶提了個新需求:上傳一個WORD文檔,要求通過系統(tǒng)把該文檔轉(zhuǎn)換成PDF和TXT,所以本文給大家分享了SpringBoot實現(xiàn)Word轉(zhuǎn)PDF和TXT的實踐,感興趣的朋友可以參考下2024-08-08Java線程池并發(fā)執(zhí)行多個任務(wù)方式
這篇文章主要介紹了Java線程池并發(fā)執(zhí)行多個任務(wù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08Spring中獲取Bean對象的三種注入方式與兩種注入方法詳解
平常的Java開發(fā)中程序員在某個類中需要依賴其它類的方法,下面這篇文章主要給大家介紹了關(guān)于Spring中獲取Bean對象的三種注入方式與兩種注入方法的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03