想象一下具有不同阶段的分阶段应用程序上下文.我们从早期阶段开始,定义必要的基础设施.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>
Run Code Online (Sandbox Code Playgroud)
阶段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>
Run Code Online (Sandbox Code Playgroud)
阶段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>
Run Code Online (Sandbox Code Playgroud)
这里的问题是,exampleMapping
在第一阶段之后无法向地图添加条目.Spring抛出了一个异常,即id exampleMapping
已经存在.如果我们遗漏第一阶段,则地图未声明,第三阶段无法解决exampleMapping
,这也会产生异常.
我该如何解决这个问题?我阅读了Collection merge(spring docs),但这并没有帮助.是否可以在使用之前将值添加到地图/列表中?
谢谢!