@CacheEvict注释是否适用于私有方法?

时间:2017-11-06 07:10:07

标签: java spring

我正在尝试使用@Cachable和@CacheEvict通过spring框架管理redis缓存。可以在类的私有方法中添加@CacheEvict吗?

2 个答案:

答案 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