我正在构建一个使用 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 文件吗?我想要一些直接的方法。
最佳答案
指定上下文路径时可以使用通配符。例如:
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:conf/*-Context.xml");
看一下部分:5.7.2 Wildcards in application context constructor resource paths .
您还可以在主上下文中使用通配符,因此当加载服务器上下文时,该通配符中包含的所有内容也将被加载。这就是服务器启动时实现满负载的方法。
<import resource="classpath:application_context/ApplicationContext*.xml" />
关于spring - 动态合并多个应用程序上下文文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14333533/