【发布时间】:2011-06-07 02:05:54
【问题描述】:
想象一个具有不同阶段的分阶段应用程序上下文。我们从早期阶段开始定义必要的基础设施。 xml 应用程序上下文按顺序加载。
拆分这些文件的原因是扩展/插件机制。
阶段 01-default-configuration.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>
Stage 02-custom-configuration.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>
Stage 03-make-use-of-configuration.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>
这里的问题是,在第一阶段之后无法向exampleMapping 映射添加条目。 Spring 会抛出一个异常,即 id 为 exampleMapping 的地图已经存在。如果我们省略第一阶段,则地图未声明,第三阶段无法解析exampleMapping,这也会产生异常。
我该如何解决这个问题?我读了Collection merging(spring docs),但这没有帮助。是否可以稍后在地图/列表中添加值,然后再使用它们?
谢谢!
【问题讨论】:
-
你说的“第一阶段后不能用条目增强”是什么意思?
标签: java spring dependency-injection