我想使用@cacheable中的enum作为其缓存名称,如@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;
  }
}

我try 在我的服务方法中将其用作常量字符串作为缓存名称

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

这不管用.

当我用声明常量类 public static String CACHE_A = "CACHE_A";

如果我更喜欢使用枚举而不是常量类,我看不出有什么不同,因为枚举应该是固定的,对吗?请纠正我,谢谢

推荐答案

如果你不介意使用Lombok,那么有一个很好的诀窍可以做到这一点:

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

然后在你的注释中你可以访问一个静态字段alightFields子类:

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

在龙目岛1.18.28版上测试过.

Java相关问答推荐

如何在Spring Security中设置CustomLogin路径?

Jlink选项&-strie-ative-Commands";的作用是什么?

将不受支持的时区UT重写为UTC是否节省?

AssertJ Java:多条件断言

我无法获取我的Java Spring应用程序的Logback跟踪日志(log)输出

为什么在maven中,getLast方法不适用于List?

多重延迟签名

把一条整型短裤和两条短裤装成一条长的

用户填充的数组列表永不结束循环

在Eclipse中调试未导出的JDK模块的Java包

有谁能帮我修一下这个吗?使输出变得更加整洁

Java在操作多个属性和锁定锁对象时使用同步和易失性

嘲笑黄瓜中的对象

如何在ApacheHttpClient 5中为单个请求设置代理?

当我将JTextField的getText函数与相等的String进行比较时;t返回true

按长度排序字符串数组

[jdk21][Foreign Function&;Memory API]MemoryLayout::varHandle通过可变数组进行 struct 化的问题

java21预览未命名的符号用于try-with-resources

使用StringBuilder和append方法创建字符串时Java字符串内部方法的问题

ChromeDriver 版本 117+ 强制另存为对话框 - 如何绕过? (selenium/Java)