我想在我的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的最佳方法是什么?应该如何完成?
答案 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。