我有以下方法;
@Cacheable(value = "psgSiteToMap", key = "'P2M_'.concat(#siteName)")
public Map getSiteDetail(String siteName) {
Map map = new HashMap();
.....
//construct map variable here
.......
return map;
}
项目启动时,无法 Autowiring 该方法所属的类。如果我将上述方法更改如下;
@Cacheable(value = "psgSiteToMap", key = "'P2M_'.concat(#siteName)")
private Map getSiteDetail(String siteName) {
Map map = new HashMap();
.....
//construct map variable here
................
return map;
}
public Map getSiteDetailPublic(String siteName) {
return this.getSiteDetail(siteName);
}
它有效。公共(public)方法的@Cacheable
注解有什么限制吗?
提前致谢
最佳答案
默认情况下,Spring AOP 仅适用于公共(public)方法。您需要 AspectJ 和加载时或编译时编织才能使其适用于私有(private)方法。
因此,在您的情况下,它有效意味着当您将@Cacheable
移动到private
方法时,根本不会创建代理,并且有效是 Autowiring ,但不是缓存。
您可能尚未在 XML 配置中设置 proxy-target-class
属性或其等效注释属性。您能否添加您正在使用的 Spring 配置和类定义行。我感兴趣的是它是否实现了任何接口(interface)?我将用更多细节来扩展我的答案。
关于java - Spring @Cacheable 不缓存公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18185209/