我正在构建一个使用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文件吗?我想要一些直接转发的方式。
答案 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" />