Java 如何在基于war的应用程序中为多个jar文件加载Springbean

Java 如何在基于war的应用程序中为多个jar文件加载Springbean,java,spring,maven,spring-mvc,Java,Spring,Maven,Spring Mvc,我有一个基于war的SpringWeb应用程序项目,该项目内部有多个jar文件。我正在使用maven设置来构建JAR和war文件。每个jar文件都有一组需要加载的bean,我不能这样做 在每个jar文件中,我都定义了一个beans.xml文件。但是这些bean并不是自动加载的。我已尝试从以下位置加载beans.xml文件: a) src/main/resources b) src/main/resources/META-INF c) src/main/resources/META-INF/spr

我有一个基于war的SpringWeb应用程序项目,该项目内部有多个jar文件。我正在使用maven设置来构建JAR和war文件。每个jar文件都有一组需要加载的bean,我不能这样做

在每个jar文件中,我都定义了一个beans.xml文件。但是这些bean并不是自动加载的。我已尝试从以下位置加载beans.xml文件: a) src/main/resources b) src/main/resources/META-INF c) src/main/resources/META-INF/spring 它不起作用


我的问题是:如何为这些场景准备应用程序上下文?基于War的多JAR应用程序。

您提到beans.xml,这是CDI项目还是标准的Spring项目


使用maven,src/main/resources下的所有内容都打包在JAR的顶层。因此,如果您在src/main/resources/META-INF/beans.xml中有一个文件,那么您应该使用“/META-INF/beans.xml”加载它,或者在spring上下文中将它定义为“classpath:/META-INF/beans.xml”。

如果您将应用程序打包为webapp应用程序,然后,您只需添加一个名为yourservletname-servlet.xml的文件,并使用
元素包含jar文件中的所有资源

Spring将在幕后扫描上述文件,包括导入的文件中声明的所有bean

以下是servletname-servlet.xml的外观(为了简洁起见,xml名称空间和模式声明是常用的):


我建议使用META-INF作为上下文配置文件的位置

这将扫描类路径根目录下META-INF文件夹下名为beans.xml的所有bean声明文件,它假定在使用Maven作为构建工具时,这些文件必须位于项目结构中的src/main/resources/META-INF/下(这样它们可以直接复制到jar\u root\u path/META-INF/下)

否则,如果未使用默认的-servlet.xml文件,则可以使用
contextConfigLocation
指定自定义应用程序上下文描述符,如下所示:


上下文配置位置
application-context.xml
试试简单 import resource=“classpath*:/META-INF/beans.xml”/


每个jar包含META-INF文件夹下的beans.xml文件。它将扫描每个jar并加载beans.xml文件,并基于这些XMLs文件创建bean。

如何启动spring上下文?spring文件是否都具有相同的名称?在service.jar中,将上下文命名为appContext-service.xml;在web应用中,将它们命名为appContext-web.xml,将它们放在同一位置。在上下文加载器中,使用类路径指定位置:appContext-*.xml。我认为这应该可行,但没有尝试。是否使用标记从主应用程序上下文导入其他XML?您可以检查以下问题: