java - Spring @Cacheable 不缓存公共(public)方法

标签 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;
    }

项目启动时,无法 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/

相关文章:

java - 从 HTTP 事件流 Java 中提取数据

java - 有人可以在 hibernate 中向我解释@MapsId吗?

java - 如何在多线程环境中使构建器模式线程安全?

java - Spring for Python 与 Spring for Java 相比如何

java - 找不到 MongoRepository (Spring Boot) 的 bean

java - "on-heap"和 "off-heap"之间的区别

java - 关闭 tomcat 服务器时无法加载 org.apache.hadoop.util.ShutdownHookManager

java - Gradle 构建中使用 `implementation` 配置指定的依赖项未放入 Spring Boot fat jar 中

tomcat - Apache shiro - 我怎么知道缓存正在为授权工作?

java - EHCache 入门