0

有一个 maven-project 可以.ear生成包含 a.war.jar's 的文件。所有这些模块都使用加载了ContextLoaderListener.

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

实际问题是我们的.war-module 有 SpringBeans 依赖于位于.jar-modules 中的其他一些 SpringBeans。在应用程序启动期间,由于查找那些的错误顺序,无法初始化 Spring 上下文context.xml

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

提前致谢。

4

1 回答 1

0

您可以更改 WAR 和 JAR 的配置文件名 - my-war-beans.xml 和 my-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 定义文件具有唯一的名称。类路径是平坦的,因此如果名称相同 - 这种方法很容易受到 jar hell 问题的影响。请注意,您可能需要将诸如“classpath*:my-jar-beans.xml”之类的 URL 更改为其他内容,具体取决于您在 JAR/WAR 中存储文件的位置。

于 2013-07-17T10:58:28.220 回答