仅在* .properties文件中存在时设置属性

时间:2015-03-22 14:04:26

标签: spring inversion-of-control

我正在使用XML文件来设置如下所示的依赖项:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd ">

  <bean id="aClassInstance" class="a.package.AClass">
    <property name="prop1" value="${prop.1}" />
    <property name="prop2" value="${prop.2}" />
  </bean>
</beans>

我正在使用PropertySourcesPlaceholderConfigurer"${}"占位符替换为*.properties文件中的值。我希望能够在bean 中设置属性,只有 *.properties文件中存在相应的属性。这可能吗?

3 个答案:

答案 0 :(得分:0)

如果属性不存在,假设您需要默认值,那么您可以尝试以下方法:

 <bean id="aClassInstance" class="a.package.AClass">
    <property name="prop1" value="${prop.1:default}" />
    <property name="prop2" value="${prop.2:default}" />
</bean>

答案 1 :(得分:0)

您可以在ignoreUnresolvablePlaceholders上将true设置为PropertySourcesPlaceholderConfigurer,并且当*.properties文件中缺少您尝试注入的属性时,它不会引发异常。

答案 2 :(得分:0)

PropertyOverrideConfigurer允许您使用beanName.property = value语法设置属性。如果属性文件中不存在特定属性,则Spring不会调用任何setter。

因此,您可以使用PropertySourcesPlaceholderConfigurer替换构造函数中的占位符,并使用PropertyOverrideConfigurer来设置可选属性。如果占位符与PropertyOverrideConfigurer.setIgnoreInvalidKeys(true)语法不对应,则可以使用beanName.property