Java WAR - загрузка компонентов Spring из внешнего JAR

Я хотел бы загрузить в свое веб-приложение Spring MVC (упакованное как WAR) некоторые компоненты инфраструктуры Spring, аннотированные с помощью @Service из внешнего jar-файла, который отвечает за доступ к базе данных и расположен в путь к классам в / WEB-INF / lib. Если возможно, желательно загружать их автоматически с помощью аннотации @Autowired.

Я успешно воспользовался решением в этом link1:

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

Однако это решение использует функцию Spring API getBean, что считается плохой практикой (см. link2).

Я также попробовал, но безуспешно, еще две вещи для загрузки applicationContext внешнего jar'а:

  • Файл appContext.xml WAR:

    <import resource="classpath*:/WEB-INF/lib/pathToExternalJar/applicationContext.xml">
    
  • Веб-xml WAR -> загрузите appContext jar, как описано здесь (link3). (например, * applicationContext.xml):

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

Как лучше всего правильно загрузить эти bean-компоненты и как это сделать?


person aloplop85    schedule 10.07.2013    source источник


Ответы (1)


Возможны файлы WAR´s appContext.xml и WAR´s web xml. Если вам нужно часто запускать интеграционные тесты, основанные как на localSpringContext.xml, так и на applicationContext.xml внешнего jar, я рекомендую подход WAR appContext.xml.

Обновлено1:

Файл appContext.xml WAR:

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

Веб-XML WAR:

<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

вы можете получить его по пути к классам: com / gmail / hippoom / applicationContext.xml или по пути к классам *: applicationContext.xml с подстановочным знаком.

person Yugang Zhou    schedule 10.07.2013
comment
Как я прокомментировал в посте, мне не удалось использовать эти подходы. Как должна выглядеть строка, введенная как ресурс (в подходе WAR appContext.xml) (пожалуйста, приведите пример)? Спасибо. - person aloplop85; 10.07.2013
comment
Что ж, нужный путь действительно был моей проблемой. Я наконец сделал это благодаря вашей помощи :) с помощью: ‹import resource = classpath: myExternalApplicationContext.xml /›, поскольку XML находился непосредственно под JAR (в настоящее время не внутри какого-либо пакета как com / gmail / гиппум). Итак - ›{classpath} =. Теперь с этим импортом я отлично загружаю внешний applicationContext. В очередной раз благодарим за помощь. - person aloplop85; 11.07.2013