web-dev-qa-db-ja.com

@Valueをオプションとして定義する方法

Spring Beanには次のものがあります。

@Value("${myValue}")
private String value;

値は正しく挿入されます。ただし、変数はオプションである必要があり、コマンドラインパラメーターとして渡され(SimpleCommandLinePropertySourceを使用してSpringコンテキストに追加されます)、この引数は常に存在するとは限りません。

デフォルト値を提供するために、次の両方を試しました。

@Value("${myValue:}")
@Value("${myValue:DEFAULT}")

しかし、いずれの場合でも、実際の値がある場合でもコロンの後のデフォルト引数が注入されます-これは、Springが注入すべきものをオーバーライドするように見えます。

@ Valueが不要であることを指定する正しい方法は何ですか?

ありがとう

87
user1052610

@Valueが不要であることを指定する正しい方法は何ですか?

「不要」とはnullを意味するという仮定に基づいて作業する場合...

_:_文字の右側にデフォルト値を指定できることに注意してください。あなたの例は@Value("${myValue:DEFAULT}")でした。

デフォルト値としてプレーンな文字列に限定されません。 [〜#〜] spel [〜#〜] 式を使用でき、nullを返す簡単なSPEL式は次のとおりです。

_@Value("${myValue:#{null}}")
_
141
Andy Brown

Java 8を使用している場合、そのJava.util.Optionalクラス。この方法で変数を宣言するだけです。

@Value("${myValue:#{null}}")
private Optional<String> value;

次に、より適切な方法で値が定義されているかどうかを確認できます。

if (value.isPresent()) {
    // do something cool
}

それが役に立てば幸い!

31
alonso_50