2013-01-15 64 views
2

我建立它使用Maven和由主系統等衆多模塊戰爭組成的Web應用程序,每一個與自己的ApplicationContext的彈簧3基礎的項目。 xml文件。系統和模塊是war文件,我使用Maven使用佈局合併它們。合併多個應用程序上下文文件動態

在開始的時候,只系統應用程序上下文文件被加載和系統本身加載存儲在WEB-INF/classes/application_context文件夾名稱不同每個模塊的應用程序上下文

這是系統的加載方式:

ServletContext context = SessionUtils.getServletContext(); 
ApplicationContext appContext = WebApplicationContextUtils 
      .getRequiredWebApplicationContext(context); 

這是系統如何進行加載應用程序的其餘部分的工作上下文

String filename = "/WEB-INF/classes/application_context"; 
ServletContext servContext = SessionUtils.getServletContext(); 
String pathname = servContext.getRealPath(filename); 
File dir = new File(pathname); 
List<String> contexts = new ArrayList<String>(); 
for (File child : dir.listFiles()) { 
    contexts.add("/application_context/" + child.getName()); 
} 
ApplicationContext context = new ClassPathXmlApplicationContext(
    contexts.toArray(new String[contexts.size()])); 

我的問題是,有沒有辦法一次加載每個Spring Context?正如我所看到的,有機會做Spring import,但最初系統的應用程序上下文不知道有關模塊的任何內容。也可以使用Maven to merge every application context in an only one,但我不知道如何在這種情況下使用它,我應該寫一個xslt文件嗎?我想要一些直接轉發的方式。

回答

2

指定上下文路徑時可以使用通配符。例如:

ApplicationContext context = new ClassPathXmlApplicationContext("classpath:conf/*-Context.xml"); 

查看部分:5.7.2 Wildcards in application context constructor resource paths

您也可以在主要上下文中使用wilcard,因此當加載服務器上下文時,該wilcard中包含的所有內容都將被加載。這就是您在服務器啓動時可以實現滿負荷的方式。

<import resource="classpath:application_context/ApplicationContext*.xml" />

+0

好點。但是,我想避免通過代碼加載模塊應用程序上下文。我想一次做所有事情。 –

+0

我在解釋如何加載系統本身的問題中添加了一些代碼。我現在可以加載其餘的人嗎? –

+0

根據我的需要編輯。 –