[英]Spring Context Hierarchy with Web Application Context
我正在處理使用DispatcherServlet
引導的Spring MVC Web應用程序。 它創建了一個管理整個應用程序的XmlWebApplicationContext
:
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
現在有一些模塊應該在運行時使用ContextSingletonBeanFactoryLocator
加載。 因此,每個模塊都有自己的ClasspathXmlApplicationContext
。 因此,模塊可以從XmlWebApplicationContext
引用bean,它應該附加到XmlWebApplicationContext
以形成Context Hierarchy,其中XmlWebApplicationContext
應該扮演父角色,而模塊的ClasspathXmlApplicationContext
扮演子上下文的角色。 不幸的是我無法使用它們連接它們
<beans>
<bean id="moduleContext"
class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg>
...
</constructor-arg>
<constructor-arg ref="parentContext" />
</bean>
</beans>
因為到目前為止我找不到將WebApplicationContext
命名為parentContext
。 我是否忽略了某些東西,或者是否有更好/更簡單的方式以不同的方式實現同樣的目標?
如果您使用注釋,則可以執行以下操作:
@Inject
private XmlWebApplicationContext context;
@Inject
private List<ClassPathXmlApplicationContext> childs;
@PostConstruct
public void refreshContext() {
for(ClassPathXmlApplicationContext appContext : childs) {
appContext.setParent(context);
}
context.refresh();
}
通過使用接口InitializingBean和ApplicationContextAware,您也可以在沒有注釋的情況下執行此操作。
編輯: childs
按類型自動裝配,因此Spring將注入所有作為ClassPathXmlApplicationContext實例的bean。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.