2

我正在构建一个使用 Maven 并由一个主系统和许多模块战争组成的 Web 应用程序,每个都是一个基于Spring-3的项目,具有他自己的ApplicationContext.xml 文件。系统和模块是战争文件,我使用 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 也可用于将每个应用程序上下文合并到一个唯一的一个中,但我不知道在这种情况下如何使用它,我应该编写一个 xslt 文件吗?我想要一些直接的方式。

4

1 回答 1

2

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

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

查看部分:5.7.2 应用程序上下文构造函数资源路径中的通配符

您还可以在主上下文中使用通配符,因此当加载服务器上下文时,该通配符中包含的所有内容也将被加载。这就是服务器启动时如何实现满载的方式。

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

于 2013-01-15T10:20:29.797 回答