评估 Spring 的 context.xml 中的属性(基本模板)

Evaluate properties in Spring's context.xml (basic templating)

我想知道是否可以评估 Spring 的 xml 配置文件中的属性。我目前已经在使用 PropertyPlaceholderConfigurer 注入属性。但是我想实现的是注入一个值,如果某个属性是true,注入另一个值,如果是false[=27] =].

例如,如果我的自定义属性 com.github.dpeger.jpa.validate 正确的 。我知道我可以像这样指定默认值:

<property name="jpaProperties">
    <map>
        <entry key="hibernate.hbm2ddl.auto" value="${com.github.dpeger.jpa.validate:none}" />
        ...
    </map>
</property>

但是是否有可能以某种方式评估属性的值可能是这样的:

<property name="jpaProperties">
    <map>
        <entry key="hibernate.hbm2ddl.auto" value="${com.github.dpeger.jpa.validate?validate:none}" />
        ...
    </map>
</property>

第一个选项:

您可以使用 #{} EL 表达式并在该表达式中插入 ${} 占位符:

<property name="jpaProperties">
    <map>
        <entry key="hibernate.hbm2ddl.auto" 
            value="#{${com.github.dpeger.jpa.validate}?'validate':'none'}" />
        ...
    </map>
</property>

第二个选项:

您可以创建单独的 属性 bean(注意,您必须定义 xmlns:util 命名空间和 spring-util.xsd 位置):

<beans ...
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="...
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util.xsd">


    <util:properties id="props" location="classpath:appliction.properties"/>

    ...

</beans>

现在您可以通过 id:

在 EL 表达式中使用这个 属性 bean
<property name="jpaProperties">
    <map>
        <entry key="hibernate.hbm2ddl.auto" 
            value="#{props['com.github.dpeger.jpa.validate']?'validate':'none'}" />
        ...
    </map>
</property>