Java Spring属性配置语法?
我在Spring XML文件中遇到了一个奇怪的语法:Java Spring属性配置语法?,java,spring,Java,Spring,我在Spring XML文件中遇到了一个奇怪的语法: <bean id="mySessionFactory" class="my.thingy.session.SessionFactoryImpl"> <property name="myPropertyName"> <!-- WHAT IS THIS VALUE? --> <value>${process.file.thing:propname.serve
<bean id="mySessionFactory" class="my.thingy.session.SessionFactoryImpl">
<property name="myPropertyName">
<!-- WHAT IS THIS VALUE? -->
<value>${process.file.thing:propname.server}</value>
</property>
</bean>
${process.file.thing:propname.server}
我不熟悉${value1:value2}
占位符的语法-第一个值value1
在那里做什么?它是一个类路径、一个包名、一个文件夹名还是什么?我已经寻找了一些解释,但它显然没有文档记录(至少就我所知)
我不熟悉${value1:value2}占位符的语法
这是Spring表达式语言的属性资源占位符配置器
回退值机制。value2
作为value1
的默认值。如果存在value1
,则将使用它。否则,将使用value2
,在这种情况下,value2
只是一个文本
${process.file.thing:propname.server}
在本例中,spring首先尝试从其环境中解析名为process.file.thing
的属性。如果成功,它将使用该值。否则,将使用propname.server
literal
PropertyPlaceholderHelper
的parseStringValue
方法负责解析默认值。此方法如下所示:
String propVal = placeholderResolver.resolvePlaceholder(placeholder);
if (propVal == null && this.valueSeparator != null) {
int separatorIndex = placeholder.indexOf(this.valueSeparator);
if (separatorIndex != -1) {
String actualPlaceholder = placeholder.substring(0, separatorIndex);
String defaultValue = placeholder.substring(separatorIndex + this.valueSeparator.length());
propVal = placeholderResolver.resolvePlaceholder(actualPlaceholder);
if (propVal == null) {
propVal = defaultValue;
}
}
}
此功能已在占位符配置支持的javadoc:
可以为每个配置器全局定义默认属性值
通过properties属性或按属性在属性上创建实例
使用默认值分隔符(默认为“:”和
可定制通过
value1
是属性名称,value2
是未找到属性时的默认值。它有助于防止异常(特别是当有人在不通知团队其他成员的情况下添加新属性时!)
用法示例:
@Value("${search.engine.url:https://www.google.com}")
private String searchEngine;
谢谢在Spring文档中,我仍然找不到这方面的任何迹象,这有点烦人。你可能会认为这样的特性会被记录下来。哦,好吧。