2015-04-09 5 views
1

Что означает, когда Weld говорит «неудовлетворительная зависимость для типа Foo», когда bean is POJO, но как только я добавляю @Dependent вверху, все работает нормально? Я помню, что он работал нормально, без указания области. Кажется, я что-то сломал.CDI bean не обнаруживается, если явно не аннотируется

Спецификации говорят:

управляемый компонент реализуется классом Java, который называется его класс боба. Класс Java верхнего уровня является управляемым компонентом, если он определен как управляемый компонент любой другой спецификации технологии Java EE, такой как спецификация технологии JavaServer Faces, или если она отвечает всем следующим условиям.

  • Это не нестатический внутренний класс.

  • Это конкретный класс или аннотированный @Decorator.

  • Он не аннотируется с помощью аннотации, определяющей компонент EJB, или объявлен как класс EJB bean в ejb-jar.xml.

  • У этого есть соответствующий конструктор. То есть, одно из следующего имеет место.

  • Класс имеет конструктор без параметров.

  • Класс объявляет конструктор аннотированный @Inject.

Нет специальной декларации, такие как аннотации, необходимо определить управляемый компонент.

+1

Из какой спецификации вы процитировать? Управляемые бобы или CDI? Есть разница. –

+0

В чем разница? – gurghet

+1

Это из спецификации CDI. Подумайте о Managed Beans как (супер) классах с функциями по умолчанию и CDI-компонентами в качестве специализированной (дочерней) версии суперкласса Managed Bean. Да, вам не нужно аннотации для определения управляемого компонента. Действующий управляемый компонент пользуется следующими услугами, предоставляемыми ему управлением контейнером - жизненным циклом, введением ресурсов и перехватчиками. CDI строится поверх спецификации управляемых компонентов и предоставляет дополнительные услуги - в основном, инъекцию контекстной зависимости. Чтобы преобразовать простой управляемый компонент в CDI-компонент, вам необходимо определить специфические аннотации CDI – Abhishek

ответ

8

Похоже, вы были использованы для CDI 1.0 и теперь смущены неявных боб архивов введенных в CDI 1.1.

beans.xml теперь необязателен, и неявные архивы боба являются по умолчанию, что означает, что класс является бобом кандидатом, только если он имеет боб определение аннотации как @Dependent, @RequestScoped и т.д.

+0

, но спецификации: Управляемый компонент реализуется классом Java, который называется его классом bean [...] ** Никакой специальной декларации, такой как аннотация, требуется для определения управляемого компонента **. – gurghet

+3

Вы можете превратить ** неявные бин-архивы ** в ** явные архивы bean ** например. путем установки 'bean-discovery-mode' на' all' в 'beans.xml': https://docs.jboss.org/cdi/spec/1.1/cdi-spec.html#bean_archive – Puce

+1

Соответствующая часть в CDI 1.2 spec здесь: http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#bean_archive – Puce

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