2013-07-17 126 views
0

有一個maven項目,它使.ear文件包含一個.war.jar's。所有這些模塊使用加載了ContextLoaderListener的Spring配置文件。彈簧配置加載順序

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:context.xml</param-value> 
</context-param> 

而實際的問題是,我們的.war - 模有依賴於分別位於.jar - 模塊一些其他SpringBeans SpringBeans。在應用程序開始的過程中,Spring上下文無法初始化,因爲找到這些context.xml的錯誤順序。

問題是,如果有可能以某種方式設置在web.xml中加載spring上下文的正確順序?

在此先感謝。

回答

0

您可以更改WAR和JAR的配置文件名 - my-war-beans.xml & my-jar-beans.xml。然後定義的ContextLoaderListener,以便它使用我的戰-beans.xml文件(的想法是隻提供一個文件作爲配置的入口點):

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:my-war-beans.xml</param-value> 
</context-param> 

然後就是進口豆從我-JAR-beans.xml中我-war-beans.xml:

<beans> 

    <!-- Include beans from JAR --> 
    <import resource="classpath*:my-jar-beans.xml"/> 

    <!-- List beans from WAR --> 
    <bean id="myBean" class="myclass" /> 

</beans> 

請確保您的bean定義文件具有唯一的名稱。類路徑是平坦的,所以如果名稱相同 - 這種方法將容易受到jar地獄問題的影響。請注意,您可能需要將「classpath *:my-jar-beans.xml」之類的URL更改爲其他內容,具體取決於您將文件存儲在JAR/WAR中的位置。

+0

yeees,這很容易,不知道爲什麼我沒有考慮過之前..非常感謝! – darkled