Spring多个属性占位符和SPEL顺序无关

时间:2015-06-03 01:36:52

标签: java xml spring

我使用eval([](char const *c) { FUNCTOR.m_function(c); }); 有两个xml配置文件。我遇到一个问题,这两个配置文件的import语句的顺序将影响其中一个配置文件中的SPEL。

配置-A.XML

property-placeholder

配置-B.XML

<context:property-placeholder
            location="classpath:dev/food.properties"
            ignore-unresolvable="true" />

<bean id="foodNames" class="java.util.HashMap">
    <constructor-arg>
        <map key-type="com.my.project.Food"
            value-type="java.lang.String">
            <entry key="#{T(com.my.project.Food).SUSHI}"
                value="${dynamodb.sushi:#{null}}" />
        </map>
    </constructor-arg>
</bean>

如果我在<context:property-placeholder location="classpath:dev/animals.properties" ignore-unresolvable="true" /> 之前导入config-a.xml,则会在config-b.xml地图中正确设置该值。但如果我在foodNames之前设置config-b.xml,则值为config-a.xml。下面可以看到一个更直观的例子。

弹簧调度-servlet.xml中

null

如何使其独立订购?

1 个答案:

答案 0 :(得分:1)

最简单的(我怀疑推荐的方法)是使用基于java的配置。在此配置中,为PropertySourcesPlaceholderConfigurer定义bean并使用@PropertySource注释来加载属性文件。

@Configuration
@PropertySource("classpath:dev/food.properties")
public class ConfigA {}

@Configuration
@PropertySource("classpath:dev/animals.properties")
public class ConfigB {}

@Configuration
@ComponentScan("your-packages-here")
public class RootConfig {
    @Bean
    public static PropertySourcesPlaceholderConfigurer PropertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}

像这样的东西。在替换将要发生之前,将加载所有配置类以及属性文件。