我想在我的 Spring MVC Web 应用程序(打包为 WAR)中加载一些带有注释的 Spring 框架 bean@Service
来自外部 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 的最佳方法是什么?应该如何完成?
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 使用通配符获取它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)