gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:28:49 35 4
gpt4 key购买 nike

我有两个使用 property-placeholder 的 xml 配置文件。我遇到一个问题,这两个配置文件的导入语句的顺序将影响其中一个配置文件中的 SPEL。

config-a.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>

config-b.xml

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

如果我在 config-b.xml 之前导入 config-a.xml,则该值会在 foodNames 映射中正确设置。但如果我在 config-a.xml 之前设置 config-b.xml,则该值为 null。下面可以看到一个更直观的示例。

spring-dispatcher-servlet.xml

// Value is properly set
<import resource="classpath:spring/config-a.xml" />
<import resource="classpath:spring/config-b.xml" />

// Value is null
<import resource="classpath:spring/config-b.xml" />
<import resource="classpath:spring/config-a.xml" />

我该怎么做才能使其独立于订单?

最佳答案

最简单的(我怀疑推荐的方法)是使用基于 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();
}
}

类似这样的事情。在进行替换之前,将加载所有配置类以及属性文件。

关于java - Spring 多属性占位符和 SPEL 顺序无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30609404/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com