2010-03-24 30 views
0

我有一個基於spring的Web服務。我現在想要爲它構建一種插件,並使用bean進行擴展。我現在已經在web.xml是:擴展基於spring的應用

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/classes/*-configuration.xml</param-value> 
</context-param> 

我的核心應用程序有main-configuration.xml其中宣佈它的豆子。我的插件應用程序有plugin-configuration.xml,它聲明瞭額外的bean。現在,當我部署時,我的版本將plugin.jar部署到/WEB-INF/lib/中,並將plugin-configuration.xml複製到/WEB-INF/classes/之下,全部在main.war之下。

這很好(雖然我認爲可能有更好的解決方案),但是當我開發插件時,我不希望Eclipse中有兩個項目具有依賴關係。我希望將main.jar作爲庫包含在內。但是,main.jarweb.xml不會自動發現。我怎樣才能做到這一點?豆注射?豆類發現的某種?還有別的嗎?

注:我希望有生產多種不同的插件,但他們每個人的發展將是對純main.jar文件

謝謝。

回答

1

我覺得還有一個更簡單的方法:

在你的主機應用程序(Web應用程序)定義類似如下contextConfigLocation參數:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:/META-INF/foo/*-configuration.xml</param-value> 
</context-param> 

的關鍵部分是classpath*:因爲它會導致掃描整個類路徑的配置文件匹配以下模式。如果您只使用classpath:,查找將停止在找到的第一個文件。如果沒有正確加載,它也不會遍歷JAR。

第二個關鍵部分是至少有一個非通配基路徑供查找工作。這是由於Classloader只有在包含基本路徑時纔可靠地返回所有資源的特徵(有關詳細信息,請參閱JavadocPathMatchingResourcePatternResolver)。

你現在有你的插件項目做的是把你的plugin-configuration.xml/META-INF/foo/,包成JAR,並將其放入您的類路徑(如果你使用Maven構建剛纔添加的依賴)。

在應用程序啓動時,Spring現在也可以從您的插件獲取所有配置文件並從em構建「應用程序上下文」。

您也可能想結賬另一篇文章,我在應用模塊化與彈簧:How do you make a multi-module spring configuration?

1

而不是/WEB-INF/classes/*-configuration.xml,試試classpath:*-configuration.xml 您還可以列出配置文件,每個配置文件在一個新行上。

如果你不使用maven,你可以通過將你的webapp標記爲依賴於創建主項目的項目來確保main.jar最終在WEB-INF/lib中。 jar,通過項目屬性。