Я думаю, что есть более простой подход:
В вашем хост-приложении (веб-приложении) определите что-то вроде следующего 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: Как создать многомодульную конфигурацию пружины?