繁体   English   中英

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

[英]How to load spring beans for multiple jar file in a war based application

我有一个基于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它不起作用。

我的问题:如何为这种情况准备应用程序上下文? 基于战争的应用程序与多个罐子。

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

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

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

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

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

这将扫描类路径根目录下META-INF文件夹下名为beans.xml的所有bean声明文件,假定当使用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>

尝试简单的import resource =“classpath *:/ META-INF / beans.xml”/

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM