Расширение приложения на основе весны - PullRequest
0 голосов
/ 25 марта 2010

У меня есть пружинный веб-сервис. Теперь я хочу создать для него своего рода плагин, который дополнит его бобами. Что у меня сейчас есть в файле web.xml:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/classes/*-configuration.xml</param-value>
</context-param>

У моего основного приложения main-configuration.xml, который объявляет свои бины. Мой плагин приложение имеет plugin-configuration.xml, который объявляет дополнительные бины. Теперь при развертывании моя сборка развертывается plugin.jar в /WEB-INF/lib/ и копирует plugin-configuration.xml в /WEB-INF/classes/ все в main.war.

Это все хорошо (хотя я думаю, что могло бы быть лучшее решение), но когда я разрабатываю плагин, я не хочу иметь два проекта в Eclipse с зависимостями. Я хочу иметь main.jar, который я включаю в качестве библиотеки. Однако web.xml из main.jar не обнаруживается автоматически. Как я могу это сделать? Бобовая инъекция? Бобовое открытие какого-то рода? Что-то еще?

Примечание: я ожидаю, что в производстве будет несколько разных плагинов, но разработка каждого из них будет идти против чистого main.jar

Спасибо.

Ответы [ 2 ]

1 голос
/ 26 марта 2010

Я думаю, что есть более простой подход:

В вашем хост-приложении (веб-приложении) определите что-то вроде следующего contextConfigLocation параметра:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:/META-INF/foo/*-configuration.xml</param-value>
</context-param>

Важнейшими частями являются classpath*:, так как это приводит к сканированию всего пути к классам для файлов конфигурации, соответствующих следующему шаблону. Если вы используете только classpath:, поиск остановится на первом найденном файле. Он также не будет проходить через JAR, если не помечен правильно.

Вторая важная часть имеет как минимум один базовый путь без подстановочных знаков для поиска. Это связано с признаками Classloader, которые надежно возвращают все ресурсы, только если они содержат базовый путь (подробности см. В Javadoc в PathMatchingResourcePatternResolver).

Что вам теперь нужно сделать с вашими проектами плагинов, так это поместить ваш plugin-configuration.xml в /META-INF/foo/, упаковать его как JAR и поместить в ваш путь к классам (в случае, если вы строите с Maven, просто добавьте зависимость).

При запуске приложения Spring теперь также забирает все файлы конфигурации из ваших плагинов и создает из них ÀpplicationContext`.

Возможно, вы также захотите проверить еще один пост, который я написал о модульности приложений в Spring: Как создать многомодульную конфигурацию пружины?

1 голос
/ 25 марта 2010

Вместо /WEB-INF/classes/*-configuration.xml, попробуйте classpath:*-configuration.xml Вы также можете перечислить файлы конфигурации, каждый на новой строке.

Вам нужно убедиться, что main.jar заканчивается в WEB-INF / lib, если вы не используете maven, вы можете сделать это в eclipse, пометив ваше веб-приложение как зависимое от проекта, который создает main.jar через свойства проекта.

...