相关疑难解决方法(0)

如何在Spring应用程序上下文中扩展已定义的列表和映射?

想象一下具有不同阶段的分阶段应用程序上下文.我们从早期阶段开始,定义必要的基础设施.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),但这并没有帮助.是否可以在使用之前将值添加到地图/列表中?

谢谢!

java spring dependency-injection

16
推荐指数
2
解决办法
2万
查看次数

标签 统计

dependency-injection ×1

java ×1

spring ×1