Я иду на этот вопрос из многих лет использования весны и только начинаю смотреть на JEE7 и CDI.Как ограничить то, что CDI считает управляемыми компонентами?
В весеннем мире вы должны вставить @Component
на фасоль, чтобы превратиться в весеннюю фасоль, чтобы весна впрыскивалась зависимостями, но в CDI кажется, что нет эквивалента @Component
.
Для меня CDI, похоже, подразумевает, что каждый класс в моем веб-приложении будет считаться компонентом CDI, который кажется нежелательным, потому что у меня много классов java, которые не используют инъекции, и я бы не хотел, чтобы кто-то просто вставлял @Inject
в эти классы и CDI делают свою магию.
Два вопроса:
- Как ограничить то, что КДИ считает управляемый боб в файл банку?
- В чем преимущество CDI, чтобы рассматривать каждый компонент как управляемый компонент?
Вы можете подробно рассказать о режиме обнаружения боба и о механизме, используемом cdi. – ams
Существует 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
Также любой компонент, который вы хотите не применять, может быть предоставлен аннотацией @Vetoed и контейнер CDI игнорирует его. См. Http://docs.oracle.com/javaee/7/tutorial/doc/cdi-adv001.htm – user1299508