教你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!

推薦閱讀: