【问题标题】:How to Inject values from a property file into JSR Custom Annotation如何将属性文件中的值注入 JSR 自定义注解
【发布时间】:2016-06-17 16:30:40
【问题描述】:

我有一个验证实体类值的弹簧组件,

其中一个变量有一个自定义注释,其值应该从属性文件中加载,目前它说Attribute must be constant

这里是示例代码。

我知道 Spring 允许获取这样的属性

@Value("${allowedNames}")
    private String names;

但我有一个实体,其中一个变量由自定义验证器接口注释,即@NameValidationDefinition。我想将属性文件中的值传递给注释,但它给出了编译时错误,即属性必须是常量,据我所知,我理解

Annotations take only constants or final and static declared primitives or Strings
public Class Person {
@NameValidationDefinition(values = names)
private String name;
}

我想知道的是,有没有一种解决方法可以让它发挥作用?

默认情况下,属性文件中的值转换为字符串,但是当我创建实体并将变量初始化为静态最终变量并在构造函数中传递字符串时,我得到了相同的编译时错误。

我将不胜感激任何形式的帮助。

【问题讨论】:

    标签: java spring validation annotations bean-validation


    【解决方案1】:

    注释中不能有变量。这不是 Bean Validation 的限制,而是 JVM 本身的限制。另见Which types can be used for Java annotation members?

    注意,在 Spring 示例中,您给出的值是一个带有特殊“键”的字符串 ${allowedNames} 稍后会被插值。这与您的代码所暗示的作为实际变量的注释值不同。

    【讨论】:

    • 我听到了,我知道除了常量之外的任何东西都不能传递给注释,但我在想是否有一种 hacky 的方式来做这件事。我的意思是开发人员一直在用代码改变规则。
    • 不,不在这个。您将不得不对 JLS 本身进行调整。不是说做不到,但我肯定不想去。
    • 哈哈,明白了.. 谢谢.. 我想我可以将此标记为答案,因为它可能会帮助其他人寻找这个。
    猜你喜欢
    • 2020-03-28
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    相关资源
    最近更新 更多