【问题标题】:How to import value from properties file and use it in annotation?如何从属性文件中导入值并在注释中使用它?
【发布时间】:2016-02-08 18:59:05
【问题描述】:

我有一个实体类:

类.java

@Entity
public class Class {
    @Id
    @GeneratedValue
    private Long id;

    @NotNull
    @Range(min = 0, max = 10)
    private double value;
}

我想摆脱 @Range 注释中的硬编码值并从配置文件中加载它们。

约束.属性

minVal=0
maxVal=10

这是我尝试过的:

@Component
@Entity
@PropertySource("classpath:/constraints.properties")
public class Class {

    @Value("${minVal}")
    private final long minValue;
    @Value("${maxVal}")
    private final long maxValue;

    @Id
    @GeneratedValue
    private Long id;

    @NotNull
    @Range(min = minValue, max = maxValue)
    private double value;
}

我得到的错误是attribute value must be constant。应该如何初始化这些字段才能得到我想要的结果?

【问题讨论】:

  • 如答案中所述,您尝试做的事情可能是不可能的。但是,如果您需要根据 Spring 配置中的某个值验证范围,您可以编写自定义验证器并将最小值和最大值注入其中。它会涉及更多的代码,而不仅仅是一个注释,所以努力可能不值得,但如果你真的需要它,它可能是一种方法

标签: java spring spring-mvc


【解决方案1】:

首先:要将值注入到 final 字段中,您必须使用构造函数注入 see this question

这意味着您将一些未知值传递给构造函数。

虽然值永远不会改变它不是constant,因为编译器无法知道这个值,因为它是在运行时确定的。并且只能使用表达式作为注解的值,其值可以在编译时确定。

那是因为注释是为一个类而不是为单个实例声明的,并且在您的示例中,变量的值对于每个实例都可能不同。

所以我想说,你想要达到的目标是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 2016-09-08
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    相关资源
    最近更新 更多