我的情况是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。有什么办法吗?
感谢。
答案 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
只包含key1
和key2
。