我正在尝试使用@Cachable和@CacheEvict通过spring框架管理redis缓存。可以在类的私有方法中添加@CacheEvict吗?
答案 0 :(得分:3)
@Cacheable
仅在bean之间调用时进行评估,即使对于公共方法也是如此。就是这样:
public class MyBean {
@Cacheable
public String getString(int i) {
return Integer.toString(i);
}
public void myOtherMethod() {
String myString = getString(2);
}
}
不会触发缓存。
因此,使用private
声明@Cacheable
方法没有意义。
请注意,Aspects也是如此(正如其他解决方案中所建议的那样);调用类内方法时也不会触发它们。
答案 1 :(得分:1)
Method visibility and @Cacheable/@CachePut/@CacheEvict
使用代理时,只应将@Cache *注释应用于public visibility
的方法。如果使用这些注释对带保护的,私有的或包可见的方法进行注释,则不会引发错误,但带注释的方法不会显示已配置的高速缓存设置。如果需要注释非公共方法,请考虑使用AspectJ(见下文),因为它会更改字节码本身。
参考:https://docs.spring.io/spring/docs/3.2.0.RC1/reference/html/cache.html