教你Spring如何使用三級(jí)緩存解決循環(huán)依賴
一級(jí)緩存存放實(shí)例化對(duì)象 。二級(jí)緩存存放已經(jīng)在內(nèi)存空間創(chuàng)建好但是還沒(méi)有給屬性賦值的對(duì)象。三級(jí)緩存存放對(duì)象工廠,用來(lái)創(chuàng)建提前暴露到bean的對(duì)象。
@Service public class TestService1 { @Autowired private TestService2 testService2; public void test1() { } }
@Service public class TestService2 { @Autowired private TestService1 testService1; public void test2() { } }
testService1先去一級(jí)緩存看有沒(méi)有實(shí)例,發(fā)現(xiàn)沒(méi)有,繼續(xù)去二級(jí)緩存查看,發(fā)現(xiàn)沒(méi)有,去三級(jí)緩存查看,發(fā)現(xiàn)沒(méi)有實(shí)例就創(chuàng)建實(shí)例,在創(chuàng)建的過(guò)程中,提前暴露,添加到三級(jí)緩存里。
這個(gè)時(shí)候進(jìn)行屬性賦值,發(fā)現(xiàn)還有一個(gè)testService2,它沒(méi)有賦值,是一個(gè)空的,就從一級(jí)緩存中去看testSerivce2有沒(méi)有實(shí)例,發(fā)現(xiàn)沒(méi)有,去二級(jí)查看發(fā)現(xiàn)沒(méi)有,去三級(jí)緩存查看,發(fā)現(xiàn)沒(méi)有,就創(chuàng)建實(shí)例,也提前暴露,添加到三級(jí)緩存里面。
這個(gè)時(shí)候testSerivce2對(duì)象里面發(fā)現(xiàn)testService1里面沒(méi)有賦值,然后對(duì)testService1進(jìn)行賦值,從一級(jí)緩存去查看,發(fā)現(xiàn)沒(méi)有,去二級(jí)查看,發(fā)現(xiàn)沒(méi)有,去三級(jí)查看,發(fā)現(xiàn)有,就把實(shí)例testService1從三級(jí)緩存添加到二級(jí)緩存里面,把實(shí)例testService1三級(jí)緩存的實(shí)例刪除,這個(gè)時(shí)候,testService2里面有實(shí)例對(duì)象,對(duì)象里面的testService1也有值了,就是一個(gè)可以使用的實(shí)例對(duì)象了,就把這個(gè)對(duì)象移動(dòng)到一級(jí)緩存里面,把三級(jí)緩存里面的testService2刪除。
這個(gè)時(shí)候testService1里面的testService2屬性就可以從一級(jí)緩存里面獲取這個(gè)testService2實(shí)例了,把它進(jìn)行賦值填充,testService1也完成了實(shí)例化,把testService1從二級(jí)緩存移動(dòng)到一級(jí)緩存里面,把testService1在二級(jí)緩存的實(shí)例也刪除。
到此這篇關(guān)于Spring使用三級(jí)緩存解決循環(huán)依賴的過(guò)程】的文章就介紹到這了,更多相關(guān)Spring三級(jí)緩存解決循環(huán)依賴內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC中RequestBody注解的List參數(shù)傳遞方式
這篇文章主要介紹了SpringMVC中RequestBody注解的List參數(shù)傳遞方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10簡(jiǎn)單談?wù)刯ava中final,finally,finalize的區(qū)別
Java中final、finally、finalize的區(qū)別與用法,困擾了不少學(xué)習(xí)者,下面我們就這個(gè)問(wèn)題進(jìn)行一些探討,希望對(duì)大家的學(xué)習(xí)有所幫助。2016-05-05SpringBoot實(shí)現(xiàn)Word轉(zhuǎn)PDF和TXT的實(shí)踐分享
研發(fā)工作中難免會(huì)遇到一些奇奇怪怪的需求,就比如最近,客戶提了個(gè)新需求:上傳一個(gè)WORD文檔,要求通過(guò)系統(tǒng)把該文檔轉(zhuǎn)換成PDF和TXT,所以本文給大家分享了SpringBoot實(shí)現(xiàn)Word轉(zhuǎn)PDF和TXT的實(shí)踐,感興趣的朋友可以參考下2024-08-08springboot整合騰訊云短信開(kāi)箱即用的示例代碼
這篇文章主要介紹了springboot整合騰訊云短信開(kāi)箱即用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Java線程池并發(fā)執(zhí)行多個(gè)任務(wù)方式
這篇文章主要介紹了Java線程池并發(fā)執(zhí)行多個(gè)任務(wù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Spring中獲取Bean對(duì)象的三種注入方式與兩種注入方法詳解
平常的Java開(kāi)發(fā)中程序員在某個(gè)類中需要依賴其它類的方法,下面這篇文章主要給大家介紹了關(guān)于Spring中獲取Bean對(duì)象的三種注入方式與兩種注入方法的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03springboot集成fastDfs過(guò)程代碼實(shí)例
這篇文章主要介紹了springboot集成fastDfs過(guò)程代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12