Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring属性配置语法?_Java_Spring - Fatal编程技术网

Java Spring属性配置语法?

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

我在Spring XML文件中遇到了一个奇怪的语法:

<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文档中,我仍然找不到这方面的任何迹象,这有点烦人。你可能会认为这样的特性会被记录下来。哦,好吧。