java - 如何在 Spring 中动态设置 bean 引用?

标签 java spring

<bean id="Mybean" class="Bean">   
  <property name="config" ref="dev"/>   
</bean>

<bean id="dev" class="Dev">
  <property name="x" ref="Dev1">
  <property name="y" ref="Dev2">
  <property name="z" ref="Dev3">
</bean>

<bean id="stag" class="Dev">
  <property name="x" ref="Stag1">
  <property name="y" ref="Stag2">
  <property name="z" ref="Stag3">
</bean>

在上述场景中,bean MyBean 中的config 属性会随着环境的变化而变化。在开发时,配置引用更改为 dev。并且在暂存时,引用更改为 stag。问题出现在检查 spring 文件时。每次 checkin 前我们都要分析config的引用。如果 checkin 的config引用的值为dev,我们可能要解释很多问题。

有什么解决方案可以让它自动化吗?
注:Spring 版本为 2.0.1

最佳答案

使用 Spring 中的 PropertyPlaceholderConfigurer,并删除未使用的 bean:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
         <value>env.properties</value>
     </property>
</bean>

<bean id="Mybean" class="Bean">   
  <property name="config" ref="config"/>   
</bean>

<bean id="config" class="Config">
  <property name="x" ref="${x}">
  <property name="y" ref="${y}">
  <property name="z" ref="${z}">
</bean>

并且 env.properties 文件包含以下属性:

x=Dev1
y=Dev2
z=Dev3

x=Stag1
y=Stag2
z=Stag3

关于java - 如何在 Spring 中动态设置 bean 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9124982/

相关文章:

java - 如何使用 jersey-media-moxy 映射/转换嵌套参数?

java - 我想要一个方法,可以等待页面中的所有 web 元素在 java 中加载(Selenium webdiver)

java - 使用 Java Config 覆盖 Autowiring setter

spring - Spring Data JPA 中的订单按日期描述限制

java - 动态访问 alfresco-global.properties

java - 在 Equinox 中配置 PostgreSQL 数据源时的 NPE

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

java - Spring MVC 国际化 : Content not changing as per the selected language

java - 使用 Docker 桥接网络时无法在集成测试中获取 JDBC 连接

java - Spring - 使用 HttpEntity 从 ResponseEntity 获取正文的通用方法