我目前使用的@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