У меня есть веб-приложение, которое использует фреймворк Sring IoC.Я использую конфигурацию Java для Spring, и я использую только определение модуля с пометкой @Configuration
(в других местах кода нет связанных с DI тегов).
Реестр Spring создается при запуске веб-приложения благодаря (немного измененной версии) прослушивателю загрузчика контекста Spring и параметру contextConfigLocation в файле web.xml, настроенному для указания на@Configuration аннотированный класс.
Все это хорошо, и я получаю AnnotationConfigWebApplicationContext.
Теперь я хочу, чтобы в моем приложении были плагины, которые будут иметь свои собственные @Configuration
аннотированные классы конфигурации,и будет использовать некоторые из основных служб приложений. НО Я не хочу, чтобы основное приложение модифицировалось для загрузки этих новых модулей.
Итак, я подумал, что я мог бы просто использовать поиск пакетов аннотированного класса для этого, нотеперь кажется, что я могу использовать два bean-компонента одного типа, даже если они имеют разные идентификаторы, и ясно, что документ AnnotationConfigWebApplicationContext заявляет, что:
Примечание: в случае нескольких классов @Configuration, позже @Bean
определения будут заменять определения, определенные в ранее загруженных файлах.Это можно использовать для преднамеренного переопределения определенных определений bean-компонентов через дополнительный класс Configuration.
Я не хочу этого, потому что модули должны иметь возможность предоставлять альтернативную версию сервисов, а не (всегда) переопределять существующую - особенно, если я хочу иметь компонент "moduleDef".
Я пытался использовать разные подходы к этому, но иерархия Context и связанных сервисов для меня просто велика.
Итак, кто-нибудь знает, как я могу достичь своей цели?
Спасибо