我目前使用的@Value春季3.1.X的註釋是這樣的:我可以將null設置爲Spring中@Value的默認值嗎?
@Value("${stuff.value:}")
private String value;
這使一個空字符串到變量,如果屬性不存在。我想有null作爲默認值而不是空字符串。當然,我還希望在屬性stuff.value未設置時避免錯誤。
我目前使用的@Value春季3.1.X的註釋是這樣的:我可以將null設置爲Spring中@Value的默認值嗎?
@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;
請注意:上下文名稱空間不支持目前的空值。不能使用
<context:property-placeholder null-value="@null" ... />
與Spring 3.1.1測試
我給@nosebrain信用,因爲我不知道「空值」,但我更喜歡完全避免使用空值,特別是因爲它的難以在屬性文件中表示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
是一個逗號分隔值或也許ENUM開關很省力。它也更容易進行單元測試:)
編輯:根據您對使用枚舉和我的意見不使用null的意見。
@Component
public class MyObject {
@Value("${crap:NOTSET}")
private Crap crap;
public enum Crap {
NOTSET,
BLAH;
}
}
上述工作適合我。你避免null。如果你的屬性文件想要明確設置他們不想處理它,那麼你可以(,但是你甚至不需要指定它,因爲它將默認爲NOTSET)。
crap=NOTSET
null
是非常糟糕的,比NOTSET
不同。這意味着春季或單元測試沒有設置它,這就是爲什麼有恕我直言的區別。我仍然可能使用setter符號(前面的例子)作爲它更容易進行單元測試(私人變量很難在單元測試中設置)。
字符串值是一個例子,我真的需要這樣的Enum值,其中一個空字符串只會導致轉換錯誤。用@null你可以有一個null作爲「no Enum set」,這就是我所需要的。 – 2012-08-17 11:23:13
所有更多的原因,我不會推薦null,而是一些代表未設置的枚舉。 – 2012-08-17 12:07:49
這需要將Enum.NOTSET放入所有屬性文件(> 30),這似乎很多工作幾乎沒有任何好處... – 2012-08-20 11:02:00
感謝@vorburger:
@Value("${email.protocol:#{null}}")
String protocol;
將在空設置的字符串值,沒有任何其他配置。
這是什麼Java等同的配置? – 2014-08-21 06:53:15
http://stackoverflow.com/questions/9347929/spring-set-a-property-only-if-the-value-is-not-null提及使用$ {some.param:#{null}},那爲我工作,而不必設置nullValue,似乎這是默認? (在Spring Boot應用程序中)。 – vorburger 2014-10-05 21:43:18
vorburger建議的SPEL $ {stuff.value:#{null}}的簡單使用功能以及 http://stackoverflow.com/questions/16735141/specify-default-property- value-as-null-in-spring – csf 2015-09-30 16:41:28