2013-11-18 4 views
2

Я иду на этот вопрос из многих лет использования весны и только начинаю смотреть на JEE7 и CDI.Как ограничить то, что CDI считает управляемыми компонентами?

В весеннем мире вы должны вставить @Component на фасоль, чтобы превратиться в весеннюю фасоль, чтобы весна впрыскивалась зависимостями, но в CDI кажется, что нет эквивалента @Component.

Для меня CDI, похоже, подразумевает, что каждый класс в моем веб-приложении будет считаться компонентом CDI, который кажется нежелательным, потому что у меня много классов java, которые не используют инъекции, и я бы не хотел, чтобы кто-то просто вставлял @Inject в эти классы и CDI делают свою магию.

Два вопроса:

  • Как ограничить то, что КДИ считает управляемый боб в файл банку?
  • В чем преимущество CDI, чтобы рассматривать каждый компонент как управляемый компонент?

ответ

1

См. Документацию для режима поиска bean-x в beans.xml. Этот атрибут был доступен только в JEE7 и недоступен в JEE6.

+0

Вы можете подробно рассказать о режиме обнаружения боба и о механизме, используемом cdi. – ams

+0

Существует 3 возможных значения. ВСЕ, НЕТ, АННОТИРОВАН. ALL означает, что все бобы, которые могут быть компонентом CDI (см. Http://docs.oracle.com/javaee/6/tutorial/doc/gjfzi.html), управляются контейнером в архиве. NONE означает, что файл класса в JAR не управляется контейнером CDI. Хотя ANNOTATED делает архив неявным архивом. В этом случае контейнер будет сканировать бобы с аннотированными типами областей. Также см. Ответ http://stackoverflow.com/questions/18310388/meaning-of-bean-discovery-mode-annotated-in-cdi-1-1 – user1299508

+0

Также любой компонент, который вы хотите не применять, может быть предоставлен аннотацией @Vetoed и контейнер CDI игнорирует его. См. Http://docs.oracle.com/javaee/7/tutorial/doc/cdi-adv001.htm – user1299508

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