“合并”两个ApplicationContext配置的最佳方法

时间:2012-02-08 06:08:45

标签: java spring

以下是该方案:

我有基本网络应用的标准applicationConfig.xml弹簧配置。它很棒。对于不同的应用程序,我还有一个“核心jar”用于我们的内部依赖项之一。 “核心jar”有一个AnnotationConfigApplicationContext,可以适当地注册不同的@Configuration bean。我正在尝试在使用@Configuration配置的应用中使用注释applicationConfig.xml bean。

我可以想出两个我认为可行的选择:

  1. 重构xml配置以使用annotationConfig并将不同的配置注册到上下文中,就像我们的“核心罐子”一样。

  2. 创建第二个上下文并直接访问它,而不是将单例/原型与xml配置放在同一个applicationContext上。我真的不愿意这样做,因为它看起来更像是一个黑客而不是一个优雅的解决方案(而且我并不完全确定它的行为会像我想要的那样。)

  3. 我梦寐以求的东西,却找不到任何支持的文件

  4. 我想以某种方式将注释配置bean注册到应用程序上下文中,但我不能让对象按照我希望的方式排列(也就是说,我的上下文不会{{1} } .register()文件 - 一次只有1个bean ....)

    只是为了跟进 - 我得到了这个工作(YAY)。就我而言,我最终遵循了gpeche提出的一般模式。

    applicationContext-parent.xml包含1 bean def:

    @Configuration

    其中CoreCommon **** Impl类是@Configuration带注释的类,它们为该上下文定义bean。

    如上所述,@Autowired Bean bean;控制器内部(例如)回退到父上下文并自动解析。

    谢谢!

1 个答案:

答案 0 :(得分:5)

我会做什么:

1)在我的WAR中,添加一个额外的Spring上下文文件,比如applicationContext-parent.xml

<beans ...>
    <bean id="parentApplicationContext" class="org.springframework.context.annotation.AnnotationConfigApplicationContext" scope="singleton">
    <!-- Any other configuration for your annotation-configured context -->
</beans>

2)在web.xml

中指定
<!-- Where do I have my parent context? -->
<context-param>
    <param-name>locatorFactorySelector</param-name>
    <param-value>path/to/applicationContext-parent.xml</param-value>
</context-param>

<!-- How is my parent context called? -->
<context-param>
    <param-name>parentContextKey</param-name>
    <param-value>parentApplicationContext</param-value>
</context-param>

使用此配置,您将拥有父/子上下文而不是“真正的”合并上下文,但您应该能够以通常的方式将父上下文中的bean注入子上下文bean,子上下文将会回退尝试解析bean时到父上下文。

相关问题