私は現在、次のような@ValueSpring3.1.xアノテーションを使用しています。
@Value("${stuff.value:}")
private String value;
これにより、属性が存在しない場合、変数に空の文字列が配置されます。空の文字列ではなく、デフォルトとしてnullを使用したいと思います。もちろん、プロパティstuff.valueが設定されていない場合のエラーも回避したいと思います。
私は現在、次のような@ValueSpring3.1.xアノテーションを使用しています。
@Value("${stuff.value:}")
private String value;
これにより、属性が存在しない場合、変数に空の文字列が配置されます。空の文字列ではなく、デフォルトとしてnullを使用したいと思います。もちろん、プロパティstuff.valueが設定されていない場合のエラーも回避したいと思います。
PropertyPlaceholderConfigurerのnullValueを設定する必要があります。この例では、文字列を使用して@null
いますが、空の文字列をnullValueとして使用することもできます。
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!-- config the location(s) of the properties file(s) here -->
<property name="nullValue" value="@null" />
</bean>
これで、文字列を使用して値@null
を表すことができますnull
@Value("${stuff.value:@null}")
private String value;
注意:現在、コンテキスト名前空間はnull値をサポートしていません。使用できません
<context:property-placeholder null-value="@null" ... />
Spring3.1.1でテスト済み
@vorburgerに感謝します:
@Value("${email.protocol:#{null}}")
String protocol;
他の構成なしで文字列値をnullに設定します。
「null値」について知らなかったので@nosebrainのクレジットを与えますが、特にnull
プロパティファイルで表すのが難しいため、null値を使用することは避けたいと思います。
ただし、これはnullを使用せずに使用する代替手段であるnull-value
ため、プロパティプレースホルダーで機能します。
public class MyObject {
private String value;
@Value("${stuff.value:@null}")
public void setValue(String value) {
if ("@null".equals(value)) this.value = null;
else this.value = value;
}
}
個人的には、後でコンマ区切り値になりたいstuff.value
場合や、スイッチを列挙する方が簡単な場合があるため、私の方法を好みます。ユニットテストも簡単です:)
編集:列挙型の使用に関するあなたのコメントとnullを使用しないという私の意見に基づいています。
@Component
public class MyObject {
@Value("${crap:NOTSET}")
private Crap crap;
public enum Crap {
NOTSET,
BLAH;
}
}
上記は私にとってはうまくいきます。nullを避けます。プロパティファイルがそれを処理したくないことを明示的に設定したい場合は、それを行います(ただし、デフォルトでNOTSETになるため、これを指定する必要はありません)。
crap=NOTSET
null
非常に悪く、とは異なりNOTSET
ます。これは、スプリングまたはユニットテストで設定されなかったことを意味します。そのため、IMHOに違いがあります。単体テストが簡単なため、おそらくセッター表記(前の例)を使用します(単体テストでプライベート変数を設定するのは困難です)。
@Valueのデフォルトとして空(長さ0)の ""文字列を挿入する必要がある場合は、次のようにSPEL(スプリング式言語)を使用します。
@Value("${index.suffix:#{''}}")
private String indexSuffix;
#{''}は、@Valueのデフォルトとして挿入された空の文字列を取得します。
イルによって