簡體   English   中英

具有Web應用程序上下文的Spring上下文層次結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM