Cacheable注解使用注意事项

本文详细解析了在使用Spring的`@Cacheable`注解时可能遇到的问题,包括内部方法调用不走缓存、其他切面注解无法正常切入、接口实现类中的方法缓存无效等,并针对每个问题提供了相应的解决策略,帮助开发者规避这些陷阱,确保缓存功能的正确使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Cacheable注解使用注意事项

1、@Cacheable 是使用AOP 代理实现的 ,通过创建内部类来代理缓存方法,这样就会导致一个问题,类内部的方法调用类内部的缓存方法不会走代理,不会走代理,就不能正常创建缓存,所以每次都需要去调用数据库。
eg:一个方法A调同一个类里的另一个有缓存注解的方法B,这样是不走缓存的。
解决方案:①将这俩个方法放在不同的类中 ②俩个方法上都加注解@Cacheable
2、@Cacheable 由AOP 实现,所以,如果该方法被其它注解切入,当缓存命中的时候,则其它注解不能正常切入并执行,@Before 也不行,当缓存没有命中的时候,其它注解可以正常工作
解决方案:①新建方法,单独使用@Cacheable
3、@Cacheable标注的方法,如果其所在的类实现了某一个接口,那么该方法也必须出现在接口里面,否则cache无效。
具体的原因是, Spring把实现类装载成为Bean的时候,会用代理包装一下,所以从Spring Bean的角度看,只有接口里面的方法是可见的,其它的都隐藏了,自然课看不到实现类里面的非接口方法,@Cacheable不起作用
解决方案:①把待cache的方法移到接口里面 ②@Cacheable标注的方法是public方法
4、@Cacheable是不可以放在接口类中的

这里是引用
@Cacheable注解不生效原因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值