在使用 Spring(Spring 版本 3.2.3)的 Java 应用程序中,
我有这样的东西:
<bean id="pm" class="com.test.PropertyManager">
<property name="targets">
<map>
<entry key="key01" value-ref="obj01" />
<entry key="key02" value-ref="obj02" />
<entry key="key03" value-ref="obj03" />
<entry key="key04" value-ref="obj04" />
<entry key="key05" value-ref="obj05" />
<entry key="key06" value-ref="obj06" />
</map>
</property>
</bean>
有什么方法可以告诉 Spring 不要将所有条目放入此映射中
但只有其中一些基于某些属性,其值可以是
应用程序构建和运行的不同环境有所不同。
我的意思是,我正在寻找类似的东西:
<bean id="pm" class="com.test.PropertyManager">
<property name="targets">
<map>
<entry key="key01" value-ref="obj01" if="${env1}"/>
<entry key="key02" value-ref="obj02" if="${env1}"/>
<entry key="key03" value-ref="obj03" unless="${env1}"/>
<entry key="key04" value-ref="obj04" unless="${env1}"/>
<entry key="key05" value-ref="obj05" />
<entry key="key06" value-ref="obj06" />
</map>
</property>
</bean>
所以例如我希望当应用程序位于环境 env1
中时添加两个条目,当应用程序在另一个 env2
中运行时添加另外两个条目,还有另外两个条目始终添加。
这可能吗?如果不可能,我有什么选择?
最佳答案
有不同的选项:
- 如果您需要每个环境不同的 Bean 配置,您可以使用配置文件:
<beans profile="dev">
<bean id="pm" class="com.test.PropertyManager">
<property name="targets">
...
</property>
</bean>
</beans>
<beans profile="production">
<bean id="pm" class="com.test.PropertyManager">
<property name="targets">
...
</property>
</bean>
</beans>
有关 XML 配置文件的更多信息:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-definition-profiles-xml
- 如果您需要更大的灵 active ,请使用工厂(使用 Java 配置,这很简单):
public class PropertyManagerFactory {
public static PropertyManager getInstance() {
// Your initialization code (check env vars to build the map...)
}
}
Bean 定义(注意工厂方法
):
<bean id="propertyManager" class="com.test.PropertyManagerFactory" factory-method="getInstance" />
用法(这里将注入(inject)getInstance方法返回的内容):
<bean id="accountService" class="com.test.AccountServiceImpl">
<property name="propertyManager" ref="propertyManager"/>
</bean>
有关使用工厂方法的更多信息:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-factory-class-static-factory-method
关于Java - Spring - 根据某些条件将条目放入 map 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28231942/