2015-07-01 4 views
1

Я пишу рамку поверх нее, где другие команды разрабатывают приложения.Переключение между Spring, Guice, Weld или другими реализациями DI

Я хочу предоставить Зависимость от инъекции как часть его. Я заставляю разработчиков использовать аннотации JSR 330, и мои рамки могут работать на DI.

Тем не менее у меня есть следующая проблема нужно

Разработчик написать модуль, если я использую Guice, beans.xml если я использую WELD. Это сопрягает специфический DI с моим кодом приложения для разработчиков. Я хочу переключить базовую инъекцию зависимостей в инфраструктуру, не касаясь какого-либо кода приложения.

Есть ли все-таки сделать это?

+0

возможно дубликат [Spring и Guice вместе, или просто весна] (http://stackoverflow.com/questions/21056063/spring-and -guise-together-or-just-spring) – durron597

+0

Этот вопрос говорит о том, какая структура лучше всего. Но этот вопрос касается предоставления общей конфигурации для всех трех фреймворков. – naveen

ответ

3

Если вы строго придерживаетесь особенностей JSR330, можно предоставить фреймворк, который может использоваться всеми тремя реализованными DI-фреймами, которые вы упомянули. Чтобы разрешить CDI сканировать модуль, вы должны предоставить bean.xml, но я бы не назвал этот код инвазивным.

Если вам нужно предоставить что-то большее, чем просто JSR330, например модули, фабрики, методы-производители, автоконфигурации, ... вы можете предлагать настраиваемые модули расширения, поэтому у вас есть «myframework-core» для агностики и «myframework-guice» поверх него предоставляет помощников и модули для уха и т. д.

0

Я не думаю, что JSR-330 имеет достаточно информации о том, как система запускается, чтобы она была действительно переключаемой. Например, если вы используете Guice, вам нужно будет создать инжектор. Если вы используете Spring, вам нужно будет использовать его JavaConfig. Если вы используете HK2, вам нужно использовать генератор жителя или использовать модули. Если вы используете CDI, вам нужен только beans.xml (а в более позднем CDI вам это даже не нужно), но вы почти наверняка найдете, что вам нужны другие функции CDI, такие как Producers.

Я думаю, JSR-330 слишком минимален, чтобы быть переносимым по этим причинам

Смежные вопросы