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

时间:2015-02-09 11:14:54

标签: java spring maven spring-mvc

我有一个基于war的spring web应用程序项目,它内部有多个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 它不起作用。

我的问题:如何为这些场景准备应用程序上下文?基于战争的应用程序,带有多个罐子。

3 个答案:

答案 0 :(得分:2)

如果您将应用程序打包为webapp,那么您只需添加名为 yourservletname-servlet.xml 的文件,并使用<import />元素包含jar文件中的所有资源

Spring,在幕后,将扫描上面提到的文件by default,包括导入文件中声明的所有bean。

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

<beans>
  <import resource="classpath:/META-INF/beans.xml"/>
</beans>

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

这将扫描类路径根目录下 META-INF 文件夹下名为 beans.xml 的所有bean声明文件,假定这些文件必须< / strong>在使用Maven作为构建工具时,在项目结构中的 src / main / resources / META-INF / 下(因此可以直接在 jar_root_path / META-INF /下复制它们) )。

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

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>application-context.xml</param-value>
</context-param>

答案 1 :(得分:1)

尝试简单     import resource =&#34; classpath *:/ META-INF / beans.xml&#34; /

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

答案 2 :(得分:0)

你提到beans.xml,这是一个CDI项目还是一个标准的Spring项目?

使用maven,src / main / resources下的所有内容都打包在JAR的顶层。因此,如果您在src / main / resources / META-INF / beans.xml中有一个文件,那么您应该使用&#34; /META-INF/beans.xml"来加载它。或者在你的春天语境中将其定义为&#34; classpath:/META-INF/beans.xml"。