我有以下方法;
@Cacheable(value = "psgSiteToMap", key = "'P2M_'.concat(#siteName)")
public Map getSiteDetail(String siteName) {
Map map = new HashMap();
.....
//construct map variable here
.......
return map;
}
在项目启动时,不能自动加载此方法所属的类。如果我改变上述方法如下;
@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);
}
它有效。公共方法的@Cacheable
注释是否有任何限制?
提前致谢
答案 0 :(得分:2)
默认情况下,Spring AOP仅适用于公共方法。您需要使用AspectJ并加载时间或编译时编织以使其适用于私有方法。
所以工作在你的情况下意味着当你将@Cachable
移动到private
方法时,根本不会创建代理并且工作是自动装配,但不是缓存。
您可能没有在XML配置中设置proxy-target-class
属性或其等效的注释属性。您能否添加您正在使用的Spring配置和类定义行。我对它是否实现任何接口感兴趣?我将以更多细节扩展我的答案。