我有一个基于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 它不起作用。
我的问题:如何为这些场景准备应用程序上下文?基于战争的应用程序,带有多个罐子。
答案 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"。