Spring配置加载顺序

时间:2013-07-17 10:40:15

标签: java spring deployment war ear

有一个maven项目,它会生成包含.ear.war的{​​{1}}个文件。所有这些模块都使用加载了.jar

的Spring配置文件
ContextLoaderListener

实际问题是我们的<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:context.xml</param-value> </context-param> - 模块有SpringBeans,它依赖于位于.war - 模块中的其他一些SpringBeans。在应用程序启动期间,由于找不到.jar的错误顺序,因此无法初始化Spring上下文。

问题是,如果有可能以某种方式在web.xml中设置加载spring上下文的正确顺序?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以更改WAR和JAR的配置文件名 - my-war-beans.xml&amp;我-JAR-beans.xml文件的。然后定义ContextLoaderListener以便它使用my-war-beans.xml(想法是只提供一个文件作为配置入口点):

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

然后只需从my-war-beans.xml中的my-jar-beans.xml导入bean:

<beans> 

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

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

</beans>

确保您的bean定义文件具有唯一的名称。 Classpath是平的,所以如果名字相同 - 这种方法很容易受到jar地狱问题的影响。请注意,您可能需要将“classpath *:my-jar-beans.xml”等URL更改为其他内容,具体取决于您在JAR / WAR中存储文件的位置。