Java WAR - Load Spring beans from an external JAR
autowired, dependency-injection, jar, spring-mvc, war
Solution
WAR´s appContext.xml and WAR´s web xml are both feasible. If you need to run integration tests based on both localSpringContext.xml and external jar's applicationContext.xml frequently, I recommend the WAR´s appContext.xml approach.
Updated1:
WAR´s appContext.xml:
<import resource="classpath:{classpath}/applicationContext.xml"/>
WAR´s web xml:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:localSpringContext.xml
classpath:{classpath}/applicationContext.xml
</param-value>
</context-param>
For example, if your applicationContext.xml is under package :com/gmail/hippoom
you can get it by classpath:com/gmail/hippoom/applicationContext.xml or classpath*:applicationContext.xml with wildcard.
Problem
I would like to load inside my Spring MVC Web Application (packaged as WAR) some Spring framework beans annotated with `@Service` from an external jar, which is in charge of accessing a database and located in the classpath under /WEB-INF/lib. If possible, it would be desirable to load them automatically using the `@Autowired` annotation. I have followed successfully the solution in this link1: ``` this.ctx = new ClassPathXmlApplicationContext("services-context.xml"); this.myAService = ctx.getBean("myAService"); ``` However, this solution uses Spring API function getBean which is considered a bad practice (see link2). I also tried, without luck two more things to load the external jar´s applicationContext: WAR´s appContext.xml: ``` <import resource="classpath*:/WEB-INF/lib/pathToExternalJar/applicationContext.xml"> ``` WAR´s web xml -> load the jar´s appContext as described here (link3). (e.g. *applicationContext.xml): ``` <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:localSpringContext.xml classpath:*applicationContext.xml </param-value> </context-param> ``` What is the best approach to load those beans properly and how should it be done?