2017-05-26 10 views
-1

私はこの疑念を持っています....コンストラクタの@Valueは本当に便利ですか?

私のオブジェクトのフィールドのデフォルト値を持っているとしようとしていましたが、デフォルト値はプロパティから取り出そうとしていました。

だから、私はそれを使用については、この方法は

@Value("${app.message.text:default}") 
final String text; 

final Object object 

MyClass(Object object){ 
    this.object = object; 
} 


//getters for both fields 

まあ、テキストは常にnullです....

それから私は、それが作業を行い、このように

final String text; 
final Object object 

MyClass(Object object, @Value("${app.message.text:default}") final String text){ 
    this.object = object; 
    this.text = text 
} 

をしようとしたと思いましたしかし、コンストラクタでは、テキストの値を指定する必要があります....その後、私はプロパティのデフォルトを決して使用しません...私はこれを誤解しましたか?私はこの@Valueを使って何をしようとしているのかとにかくアーカイブしていますか?

ありがとうございました。

+0

'@ Value'はSpring管理のBeanにのみ適用されます。あなたのクラスがSpringによって管理されていない場合は、何もする機会がありません。なぜなら、あなたの' @Value'フィールド無効である。 – Andreas

答えて

0

それは、プロパティレベルでは動作しません理由:

あなたはクラスのメンバに注釈を付けるときは、春には、(オブジェクトが作成された後)の値を設定するためにリフレクションを使用しています。この場合、フィールドは最終としてマークされますので、オブジェクトを作成中に設定する必要があります(はオブジェクトが作成された後ではありません)。@Valueへの唯一の方法はコンストラクタインジェクションを使用することです。

それはコンストラクタで動作しない理由:Beanが作成されている場合

春はだけなので、あなたのクラスがあることを確認し@Component@Configurationまたは@Bean注釈によって、すなわち、(春経由@Valueを使用して値を設定します

関連する問題