4

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

我已成功遵循此链接 1 中的解决方案

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

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

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

  • WAR 的 appContext.xml:

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

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

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

4

1 回答 1

3

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的网页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 来获取它。

于 2013-07-10T15:44:14.057 回答