动态合并多个应用程序上下文文件

时间:2013-01-15 08:13:53

标签: spring xslt maven xml-parsing maven-3

我正在构建一个使用Maven的Web应用程序,由一个主系统和许多模块 wars 组成,每个模块都是基于 Spring-3 的项目。拥有 ApplicationContext.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文件吗?我想要一些直接转发的方式。

1 个答案:

答案 0 :(得分: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" />