簡體   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