java - 创建用于注释字段的常量

标签 java spring caching

我正在使用 Spring 注释将缓存合并到现有的 Spring 项目中。我创建了这个类来存储缓存配置 -

public class CacheParams {

    public final String name;    
    public final int lifeTime;    
    public final TimeUnit lifeTimeUnit;    
    public final String key;

    public CacheParams(args here) {/*implementation here*/}
}

这就是我打算使用它的方式 -

class FooDaoCache extends FooDaoImpl {

    private static final CacheParam USER_BY_ID_CACHE = new CacheParams(values here);

    @Override
    @Cacheable(cacheNames = USER_BY_ID_CACHE.name, key = USER_BY_ID_CACHE.key)
    public User getUser(int userId) {
        implementation here
    }
}

但这不起作用,因为 USER_BY_ID_CACHE 将在编译时创建。如果我只是创建一个包含缓存名称的字符串常量,我就可以成功使用它 -

class FooDaoCache extends FooDaoImpl {
    private static final String CACHE_NAME = "baz";

    @Override
    @Cacheable(cacheNames = CACHE_NAME)
    public User getUser(int userId) {
        //implementation here
    }
}

有什么办法可以解决这个问题或替代设计吗?我需要 CacheParams 类,因为我还必须在代码的其他部分使用缓存名称、生命周期等执行其他操作。

最佳答案

CacheParam 需要是 enum或者name字段需要是static Final String

注释返回类型只能是原始类型、枚举、字符串、类和数组。

关于java - 创建用于注释字段的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41216094/

相关文章:

php - magento 的空白前端

java - 如何刷新字符串中的某些参数?

java - 如何使用java定位并点击jubula中的web元素?

java - 如何在不使用 xml 配置的情况下禁用 Spring boot 中的 DEBUG 消息?

java - 模块化 Spring 项目的架构

python - Django Rest 框架缓存 header

java - 这里有人成功地将 Micronaut GraphQL API 部署到 AWS Lambda 吗?

java - 以编程方式 RelativeLayout.ALIGN_RIGHT 与给定的 View.getId() 不工作

java - 将文件数据作为 Bzip2 写入 servlet 响应的输出

使用 LRU 的 Java 缓存模拟给出了不准确的命中率