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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值