2015-11-07 41 views
2

我有一類就是一個實體:如何從屬性文件導入值並在註釋中使用它?

Class.java

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

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

我想從該@Range註釋去掉硬編碼值,並從配置文件加載它們。

constraints.properties

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。如何執行這些字段的初始化以獲得我想要的結果?

+1

正如答案中提到的,你試圖做的事情可能是不可能的。但是,如果您需要根據Spring配置中的某些值驗證範圍,則可以編寫自定義驗證程序並向其中注入最小值和最大值。這將涉及更多的代碼而不僅僅是單個註釋,所以這些努力可能不值得,但如果你真的需要它,它可能是一條路 –

回答

2

第一:注入值代入,你必須使用構造器注入see this question

韻母這意味着你通過一些未知的值到構造。

儘管值永遠不會改變它不是constant,因爲編譯器無法知道此值,因爲它在運行時確定。而且,您只能使用表達式作爲可在編譯時確定其值的註釋值。

那是因爲註釋是爲一個類聲明的,而不是針對單個實例,並且在您的示例中,變量的值對於每個實例都可能不相同。

所以我會說,你想達到的是不可能的。

相關問題