【问题标题】:Spring 3.5 Setting an xml property, handling the default value using PropertyPlaceholderConfigurerSpring 3.5 设置 xml 属性,使用 PropertyPlaceholderConfigurer 处理默认值
【发布时间】:2021-01-21 07:43:13
【问题描述】:

我正在使用 Spring 3.5 和 xml 配置处理一个旧项目。

在应用程序上下文中,我将一个属性设置为一个外部配置的 xml 文件值,所以像这样 -

<bean id="myService" class="com.mypath.MyService">
    <property name="myProperty" value="${myValue}:myDefaultValue" />
</bean>

这一切正常。

在一些测试中,虽然有一个 test-context.xml 开始发挥作用,它设置属性的值,像这样

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="properties">
        <util:properties>
            <prop key="myProperty">myValue</prop>
        </util:properties>
    </property>
</bean>

这无法“理解”默认值。如果我将值留空,我会得到 :myDefaultValue 返回。如果我像我的示例所示设置 myValue,我会得到 myValue:myDefaultValue。

我在 PropertyPlaceholderConfigurer 上遇到了一个快速的高峰,它看起来非常基本,没有很多选项。我以前没用过。有谁知道我是否有一种简单的方法来处理默认值?或者也许我必须使用不同的方法来设置测试上下文值?

【问题讨论】:

  • IIRC,应该是${myValue:defaultValue}
  • 多么棒的木板啊。是的,这解决了问题。谢谢。
  • 不确定前进的方向。如果你喜欢把它作为你已经解决的答案。否则我会删除问题并假装它从未发生过......

标签: java spring


【解决方案1】:

您的语法略有偏差。表达式的默认值放在大括号内,如下所示:${myValue:defaultValue}

【讨论】:

  • 仅供参考,这不是SpEL;它是一个属性占位符。 SpEL 是 Spring Expression Language,在 XML 配置中由 #{...} 表示(而不是 ${...} 用于属性占位符)。
  • @GaryRussell 我的理解是完整的 SpEL 引擎可以替换;这是不正确的吗? (例如,我使用过字符串粘贴。)
  • 我不确定你的意思;我只是澄清${...} 不是 XML bean 定义中的 SpEL。
  • @GaryRussell 是 @Value 中的 SpEL 吗?
  • 不适用于${...};再次,您需要 #{...} 用于 SpEL 表达式(${...} 是简单的属性值替换)。 SpEL 比这要复杂得多。例如#{@someBean.someProperty + @someOtherBean.otherProperty}.
猜你喜欢
  • 2015-05-23
  • 2011-08-23
  • 2011-09-16
  • 2023-01-02
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
相关资源
最近更新 更多