java - 我可以在 @Cacheable 中使用枚举吗

标签 java spring-boot caching enums caffeine-cache

我想在 @Cacheable 中使用枚举作为其缓存名称,例如 @Cacheable(CacheName.CACHE_A.getName())

我有一个示例枚举,例如

public enum CacheName {
  CACHE_A("CACHE_A");
  private final String name;
  CacheName(String name){
    this.name=name;
  }
  public String getName(){
    return name;
  }
}

我尝试在我的服务方法中像常量字符串一样使用它作为缓存名称

@Cacheable(CacheName.CACHE_A.getName())
public MyObject getObject(){ 
//return something 
}

这不起作用。

当我声明一个常量类时它起作用 公共(public)静态字符串CACHE_A =“CACHE_A”;

如果我更喜欢使用枚举而不是常量类,是否有任何解决方法,我没有看到任何差异,因为枚举应该是固定的,对吧?请指正,谢谢

最佳答案

如果您不介意使用 lombok,那么有一个巧妙的技巧可以实现这一点:

@FieldNameConstants(onlyExplicitlyIncluded = true)
public enum CacheName {
    @FieldNameConstants.Include CACHE_A,
}

然后在注释中,您可以通过 Fields 子类访问静态字段:

@Cacheable(CacheName.Fields.CACHE_A)
public MyObject getObject(){
    //return something 
}

在 lombok 版本 1.18.28 上测试。

关于java - 我可以在 @Cacheable 中使用枚举吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77598934/

相关文章:

java - 传递最少的参数好吗?

java - Lambda 只能与功能接口(interface)一起使用吗?

java - 如何解决Spring boot @EnableAsync和@Async问题?

java - 为什么 Spring @Autowired 注入(inject)另一个对象?

java - 从java spring boot应用程序调用谷歌云函数

java - SpringFox Swagger 与 Springboot 应用程序集成

scala - 使用函数式回调/代理模式实现 scala 进行缓存

java - 为货币格式化 JTable 列

caching - 什么是分布式缓存?

ios - NSURLCache 对早于 max-age 的请求使用缓存