构造函数中的@Value如何真正有用?

时间:2017-05-26 22:07:24

标签: java

我怀疑......

我试图为我的对象中的字段设置默认值,默认值我想从属性中提取它。

所以,我想过以这种方式使用它

@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?

感谢。

1 个答案:

答案 0 :(得分:0)

之所以不在物业层面工作:

当您注释类成员时,Spring使用反射来设置值(在创建对象之后)。现在,在这种情况下,该字段被标记为final,因此必须在创建对象时设置它(而不是在创建对象之后),这是@Value最终字段的唯一方法将使用构造函数注入。

它在构造函数中不起作用的原因:

如果bean是通过Spring创建的(例如,通过@Value@Component@Configuration注释,则Spring仅使用@Bean设置值,因此请确保您的类已注释其中任何一个。