我怀疑......
我试图为我的对象中的字段设置默认值,默认值我想从属性中提取它。
所以,我想过以这种方式使用它
@Value("${app.message.text:default}")
final String text;
final Object object
MyClass(Object object){
this.object = object;
}
//getters for both fields
好吧,文字总是空的....
然后我尝试了这种方式
final String text;
final Object object
MyClass(Object object, @Value("${app.message.text:default}") final String text){
this.object = object;
this.text = text
}
它确实有效,但是在构造函数中我必须指定text的值....然后我将永远不会使用属性中的默认值...我是否误解了这个?无论如何要存档我正在尝试使用这个@Value?
感谢。
答案 0 :(得分:0)
之所以不在物业层面工作:
当您注释类成员时,Spring使用反射来设置值(在创建对象之后)。现在,在这种情况下,该字段被标记为final,因此必须在创建对象时设置它(而不是在创建对象之后),这是@Value
最终字段的唯一方法将使用构造函数注入。
它在构造函数中不起作用的原因:
如果bean是通过Spring创建的(例如,通过@Value
,@Component
或@Configuration
注释,则Spring仅使用@Bean
设置值,因此请确保您的类已注释其中任何一个。