Spring @Cacheable不会缓存公共方法

时间:2013-08-12 10:55:21

标签: java spring ehcache

我有以下方法;

    @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注释是否有任何限制?

提前致谢

1 个答案:

答案 0 :(得分:2)

默认情况下,Spring AOP仅适用于公共方法。您需要使用AspectJ并加载时间或编译时编织以使其适用于私有方法。

所以工作在你的情况下意味着当你将@Cachable移动到private方法时,根本不会创建代理并且工作是自动装配,但不是缓存。

您可能没有在XML配置中设置proxy-target-class属性或其等效的注释属性。您能否添加您正在使用的Spring配置和类定义行。我对它是否实现任何接口感兴趣?我将以更多细节扩展我的答案。