Java WAR - 从外部JAR加载Spring bean

时间:2013-07-10 08:02:12

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

我想在我的Spring MVC Web应用程序(打包为WAR)中加载一些来自外部jar的 @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 - &gt;按照此处所述加载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的最佳方法是什么?应该如何完成?

1 个答案:

答案 0 :(得分:3)

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

Updated1:

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位于package:com / gmail / hippoom

你可以通过classpath得到它:com / gmail / hippoom / applicationContext.xml或classpath *:带有通配符的applicationContext.xml。