【问题标题】:Java WAR - Load Spring beans from an external JARJava WAR - 从外部 JAR 加载 Spring bean
【发布时间】:2023-03-23 22:20:01
【问题描述】:

我想在我的 Spring MVC Web 应用程序(打包为 WAR)中加载一些带有 @Service 注释的 Spring 框架 bean,来自外部 jar,它负责访问数据库和 位于/WEB-INF/lib 下的类路径中。如果可能,最好使用 @Autowired 注释自动加载它们。

我已经成功地遵循了这个link1中的解决方案:

this.ctx = new ClassPathXmlApplicationContext("services-context.xml");
this.myAService = ctx.getBean("myAService");

但是,此解决方案使用 Spring API 函数 getBean,这被认为是一种不好的做法(请参阅 link2)。

我也尝试过加载外部 jar 的 applicationContext 的另外两件事,但没有运气:

  • WAR 的 appContext.xml:

    <import resource="classpath*:/WEB-INF/lib/pathToExternalJar/applicationContext.xml">
    
  • WAR 的 web xml -> 加载 jar 的 appContext,如此处所述 (link3)。 (例如 *applicationContext.xml):

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

正确加载这些 bean 的最佳方法是什么?应该如何完成?

【问题讨论】:

    标签: spring-mvc jar dependency-injection war autowired


    【解决方案1】:

    WAR 的 appContext.xml 和 WAR 的 web xml 都是可行的。如果你需要经常运行基于 localSpringContext.xml 和外部 jar 的 applicationContext.xml 的集成测试,我推荐 WAR 的 appContext.xml 方法。

    更新1:

    WAR 的 appContext.xml:

    <import resource="classpath:{classpath}/applicationContext.xml"/>
    

    WAR 的 web xml:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:localSpringContext.xml
            classpath:{classpath}/applicationContext.xml
    </param-value>
    </context-param>
    

    例如,如果您的 applicationContext.xml 在包下:com/gmail/hippoom

    您可以通过 classpath:com/gmail/hippoom/applicationContext.xml 或 classpath*:applicationContext.xml 使用通配符来获取它。

    【讨论】:

    • 正如我在帖子中评论的那样,我使用这些方法没有成功。作为资源输入的字符串(在 WAR 的 appContext.xml 方法中)应该如何(请提供示例)?谢谢。
    • 嗯,所需的路径确实是我的问题。感谢您的帮助,我终于做到了:) 使用: 因为 XML 直接位于 JAR 下(目前,不在任何包中,如 com/ gmail/河马)。所以-> {classpath} =“”。现在通过该导入,我完美地加载了外部应用程序上下文。再次感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 2017-01-04
    • 2015-06-16
    • 2018-01-29
    • 2011-02-03
    相关资源
    最近更新 更多