这是场景:
我有一个applicationConfig.xml基本的Web应用程序的标准弹簧配置.它很棒.对于不同的应用程序,我还有一个"核心jar"用于我们的内部依赖项之一."核心jar"有一个适当地AnnotationConfigApplicationContext注册不同的@Configurationbean.我正在尝试使用@Configuration应用程序中的注释bean,使用applicationConfig.xml.
我可以想出两个我认为可行的选择:
重构xml配置也使用annotationConfig并将不同的配置注册到上下文中,就像我们的"核心jar"一样.
创建第二个上下文并直接访问它,而不是让单个/原型与xml配置位于相同的applicationContext上.我真的不愿意这样做,因为它看起来更像是一个黑客而不是一个优雅的解决方案(而且我并不完全确定它的行为会像我想要的那样.)
我梦寐以求的,却找不到任何支持的文档
我想以某种方式将注释配置bean注册到应用程序上下文中,但是我不能让对象按照我希望的方式排列(也就是说,我的上下文不会.register()是@Configuration文件 - 只有1个bean在一次......)
只是为了跟进 - 我得到了这个工作(YAY).就我而言,我最终遵循了gpeche提出的一般模式.
applicationContext-parent.xml包含1个bean def:
<bean id="parentApplicationContext" class="org.springframework.context.annotation.AnnotationConfigApplicationContext" scope="singleton">
<constructor-arg>
<list>
<value>com.package.CoreCommonInContainerConfigImpl</value>
<value>com.package.CoreCommonCommonConfigImpl</value>
</list>
</constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)
其中CoreCommon****Impl类是@Configuration注释类,它们为该上下文定义bean.
正如所指出的那样,一个@Autowired Bean bean; 控制器内部(例如)回退到父上下文并自动解析.
谢谢!
我会怎么做:
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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
使用此配置,您将拥有父/子上下文而不是"真正的"合并上下文,但您应该能够以通常的方式将父上下文中的bean注入子上下文bean,子上下文将回退到父上下文尝试解析bean时的上下文.
| 归档时间: |
|
| 查看次数: |
5139 次 |
| 最近记录: |