Spring конфигурация в мультимодульном проекте
Я новичок в Spring и получил ситуацию, когда один проект с несколькими модулями, включая один веб-модуль. Веб-модуль использует Spring MVC, но мне было интересно, могу ли я иметь основную конфигурацию Spring на уровне проекта, которая заботится обо всем проекте, так что я могу воспользоваться всеми преимуществами инфраструктуры Spring.
main
-module1
-module2
-web
+spring3.1, spring-security
Какова была бы лучшая настройка для этого случая?
Ответы
Ответ 1
Макет сборки и время выполнения CLASSPATH - это две разные вещи. Даже если вы определяете отдельные файлы applicationContext.xml
или @Configuration
в разных модулях, они могут быть объединены в один CLASSPATH.
То, что module1
и module2
могут объявлять свои собственные контексты, но поскольку CLASSPATH объединяется во время выполнения, будет создан только один основной контекст. Также, если вы решите использовать сканирование CLASSPATH в одном модуле, он может выбрать классы (beans), аннотированные с помощью @Service
в других модулях.
В модуле web
, который также должен иметь зависимости от основных библиотек Spring, также будет зависеть от spring-web
, MVC и spring-security
. Этот модуль создаст дочерний web
контекст, который имеет доступ к основному контексту, но не наоборот.
Очевидно, у вас должна быть только одна копия каждой библиотеки в вашем uber-JAR (ear
?)
Ответ 2
У нас есть такая архитектура, где я работаю. Мы решили использовать ContextLoaderListener (Spring Event Listener) в веб-модуле.
Затем, в serverApplicationContext.xml, мы импортируем все файлы контекстов модулей:
<import resource="classpath*:module1ApplicationContext.xml" />
<import resource="classpath*:module2ApplicationContext.xml" />
...
Таким образом, вы используете загрузку контекста spring во время инициализации контекста веб-приложения.