初始bean初始化后注入其他值

时间:2014-01-28 00:45:39

标签: spring

我的情况是bean最初是由要在特定运行时环境中使用的项目定义的。但是,此项目也用于

的不同运行时环境
  • 喜欢重新定义特定的bean
  • 或(更好)将一些额外的值注入已经初始化的bean。

我讨厌覆盖bean,可能会非常混乱,所以我想尝试第二种选择。

更具体的例子:

base.xml可能包含

<bean id="xxx" class="yyy">
  <constructor-arg>
    <map>
      <entry key="key1" value="val1"/>
    </map>
  </constructor-arg>
</bean>

此bean在项目A中的所有位置都使用。

项目B使用项目A,加载其所有弹簧配置,但需要添加 豆子地图的另一个值。

像...我不知道

<bean id="xxx1" class="yyy" parent="xxx">
  <property name="additionalMapValues">
    <map>
      <entry key="key1" value="val1"/>
    </map>
  </property>
</bean>

不要真正关心新bean,我想影响原来的bean。有什么办法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

如果它只是新bean中需要的其他地图属性(或其他集合属性),则可以使用Spring的集合合并功能。例如 - 类似于您已经显示的内容,项目A可能会声明:

<bean id="xxx" class="yyy">
    <property name="mapValues">
        <map>
            <entry key="key1" value="val1"/>
        </map>
    </property>
</bean>

然后在项目B中,您可以创建一个扩展它的新bean定义 - 并使用merge="true"属性合并到任何新属性中。

<bean id="xxx1" parent="xxx">
    <property name="mapValues">
        <map merge="true">
            <entry key="key2" value="val2"/>
        </map>
    </property>
</bean>

请注意,在这种情况下,两个bean都是具体的。所以父bean xxx只包含key1,而子bean xxx1只包含key1key2

更多信息here和另一个示例here