2013-07-10 203 views
4

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

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

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

然而,该解决方案使用了Spring API函数的getBean这被认为是不好的做法(见link2)。

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

  • WAR's appContext.xml:

    <import resource="classpath*:/WEB-INF/lib/pathToExternalJar/applicationContext.xml"> 
    
  • WAR's网站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> 
    

什么是正确和应该怎样做加载这些黄豆最好的方法呢?

回答

3

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

Updated1:

WAR's appContext.xml:

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

WAR's网站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 o r classpath *:带通配符的applicationContext.xml。

+0

正如我在这篇文章中评论的那样,我没有成功地使用这些方法。应该如何输入字符串作为资源(在WAR的appContext.xml方法中)看起来像(请提供示例)?谢谢。 – aloplop85

+0

对不起,我错过了您的评论,请参阅最新的答案。 – Hippoom

+0

那么,所需的路径确实是我的问题。我终于这样做了,感谢您的帮助:):** **因为XML直接位于JAR下(当前,不在任何包中,如com/gmail/hippoom )。所以 - > {classpath} =“”。现在使用该导入,我完全加载了外部applicationContext。再次感谢你的帮助。 – aloplop85