如何在Spring应用程序上下文中扩展已经定义的列表和映射?
想象一下具有不同阶段的暂存应用程序上下文。我们从早期阶段开始,定义必要的基础设施。xml 应用程序上下文按顺序加载。
拆分这些文件的原因是扩展/插件机制。
阶段 01 - 默认配置.xml
我们准备并使用 id 声明地图,以便以后使用数据对其进行增强。exampleMapping
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="[...]">
<util:map id="exampleMapping" />
</beans>
阶段 02 - 自定义配置.xml(可选)
我们配置并添加一个条目。exampleMapping
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="[...]">
<util:map id="exampleMapping">
<entry key="theKey" value="theValue" />
</util:map>
</beans>
阶段 03-利用配置.xml(强制)
使用定义的映射,无论它是自定义配置的还是仍然是空的声明映射。exampleMapping
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="[...]">
<bean id="exampleService" class="com.stackoverflow.example.ExampleService">
<property name="mapping" ref="exampleMapping" />
</bean>
</beans>
这里的问题是,在第一阶段之后,无法向地图添加条目。Spring 会引发一个异常,指出 id 所在的映射已存在。如果我们省略第一阶段,则地图未声明,第三阶段无法解析,这也会产生异常。exampleMapping
exampleMapping
exampleMapping
我该如何解决这个问题?我读了收藏合并(春季文档),但这没有帮助。是否可以在以后使用映射/列表之前向它们添加值?
谢谢!