Spring自調用緩存失效解決方案

自調用失效見https://www.cnblogs.com/BigJunOba/p/9794911.html文章最後,當兩個同爲緩存的方法出現相互之間的內部調用時,出現被調用方法緩存失效,現給出解決方案:

1. 讓原有類實現一個可注入自身代理類的接口,接着爲所有實現了該接口的bean執行自身代理bean的注入,現給出可複用的注入裝配器如下(實現邏輯爲,從Spring容器中獲取所有實現該接口的bean,循環迭代遍歷這些bean,並調用接口中的方法將自身代理類注入自己)

2. 在Spring容器啓動之後加載1中寫好的注入裝配器

3. 需要告訴Spring什麼時候觸發1中寫好的注入裝配器,這裏設置一個啓動管理器(實現邏輯爲,通過自動注入方式注入所有實現SystemBootAddon的插件,接着調用這些插件,通過監聽Spring容器的ContextRefreshedEvent實現)

 

具體實現可參考《精通Spring4.x企業應用開發實戰》P266 - P287。

 

P.S.該問題的關鍵是AOP使用動態代理模式實現,在自調用的過程中,是類自身的調用,而不是代理對像去調用,所以就不會將類自身的調用織入我們的流程中,例如緩存和事務。解決該問題的關鍵在於要使用代理對象去調用,另一種解決方案見https://blog.csdn.net/pp_fzp/article/details/83180547

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章