如何将Java枚举名称作为注解的属性值实现详解
一、前言
- Java注解的属性值,必须为 常量
- 有些场景想把 枚举名称 设置为 注解的属性值(如 spring-cache 用枚举配置缓存,使用时 需要 缓存名称)
二、方案
方案一:名称属性 + 外部名称接口
@lombok.Getter @lombok.AllArgsConstructor public enum CommonCacheConfig { QUOTE_LEVEL(CommonCacheConstant.QUOTE_LEVEL, 2); private final String name; private final int ttl; }
public interface CommonCacheConstant { String QUOTE_LEVEL = "QUOTE_LEVEL"; }
使用:@Cacheable(cacheNames = CommonCacheConstant.QUOTE_LEVEL)
方案二:名称属性 + 内部名称接口
public enum CommonCacheConfig { QUOTE_LEVEL(Constant.QUOTE_LEVEL, 2); private final String name; private final Integer ttl; public interface Constant { String QUOTE_LEVEL = "QUOTE_LEVEL"; } }
使用:@Cacheable(cacheNames = CommonCacheConfig.Constant.QUOTE_LEVEL)
方案三:Lombok 的 FieldNameConstants
@lombok.Getter @lombok.AllArgsConstructor @lombok.experimental.FieldNameConstants(onlyExplicitlyIncluded = true) public enum CommonCacheConfig { @FieldNameConstants.Include QUOTE_LEVEL(2); private final Integer ttl; }
使用:@Cacheable(cacheNames = CommonCacheConfig.Fields.QUOTE_LEVEL)
注意:FieldNameConstants 的 onlyExplicitlyIncluded 需设置为 true,否则 按枚举的属性(如 ttl)生成,同时在 枚举项前加 @FieldNameConstants.Include
三、总结
- 通过 Lombok 的 FieldNameConstants 自动生成 枚举名称常量,提高了 可维护性
- 参考:java - Use Enum type as a value parameter for @RolesAllowed-Annotation - Stack Overflow
以上就是如何将Java枚举名称作为注解的属性值实现详解的详细内容,更多关于Java枚举名称作为注解属性值的资料请关注脚本之家其它相关文章!
相关文章
详解Springboot整合ActiveMQ(Queue和Topic两种模式)
这篇文章主要介绍了详解Springboot整合ActiveMQ(Queue和Topic两种模式),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-04-04Spring Security 实现用户名密码登录流程源码详解
在服务端的安全管理使用了Spring Security,用户登录成功之后,Spring Security帮你把用户信息保存在Session里,但是具体保存在哪里,要是不深究你可能就不知道,今天小编就带大家具体了解一下Spring Security实现用户名密码登录的流程2021-11-11
最新评论