教你Spring如何使用三級緩存解決循環依賴
一級緩存存放實例化對象 。二級緩存存放已經在內存空間創建好但是還沒有給屬性賦值的對象。三級緩存存放對象工廠,用來創建提前暴露到bean的對象。
@Service public class TestService1 { @Autowired private TestService2 testService2; public void test1() { } }
@Service public class TestService2 { @Autowired private TestService1 testService1; public void test2() { } }
testService1先去一級緩存看有沒有實例,發現沒有,繼續去二級緩存查看,發現沒有,去三級緩存查看,發現沒有實例就創建實例,在創建的過程中,提前暴露,添加到三級緩存裡。
這個時候進行屬性賦值,發現還有一個testService2,它沒有賦值,是一個空的,就從一級緩存中去看testSerivce2有沒有實例,發現沒有,去二級查看發現沒有,去三級緩存查看,發現沒有,就創建實例,也提前暴露,添加到三級緩存裡面。
這個時候testSerivce2對象裡面發現testService1裡面沒有賦值,然後對testService1進行賦值,從一級緩存去查看,發現沒有,去二級查看,發現沒有,去三級查看,發現有,就把實例testService1從三級緩存添加到二級緩存裡面,把實例testService1三級緩存的實例刪除,這個時候,testService2裡面有實例對象,對象裡面的testService1也有值瞭,就是一個可以使用的實例對象瞭,就把這個對象移動到一級緩存裡面,把三級緩存裡面的testService2刪除。
這個時候testService1裡面的testService2屬性就可以從一級緩存裡面獲取這個testService2實例瞭,把它進行賦值填充,testService1也完成瞭實例化,把testService1從二級緩存移動到一級緩存裡面,把testService1在二級緩存的實例也刪除。
到此這篇關於Spring使用三級緩存解決循環依賴的過程】的文章就介紹到這瞭,更多相關Spring三級緩存解決循環依賴內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- SpringBoot在自定義類中調用service層等Spring其他層操作
- 解決spring AOP中自身方法調用無法應用代理的問題
- SpringBoot自定義啟動器Starter流程詳解
- Spring使用@Autowired註解靜態實例對象方式
- SpringBoot @Autowired註解註入規則介紹