2015-11-23 3 views
1

У меня есть некоторое доказательство концепции в локальной установке Glassfish 4.1.1 (WELD 2.2.2) о CDI.Метод производителя CDI не работает, если определение класса не объявляет область

Я создал класс bean с именем TipicalBean, который вводит целое число, созданное в методе производителя.

Класс, определяющий метод производителя выглядит следующим образом

public class ProducerTest { 

    @Produces @MyNumber @Dependent public static int getMyNumber() { 
     return 100; 
    } 
} 

Это не работает. Даже если я объявляю метод статического

Но это действительно работает, если если поставить @Dependent сферы в определении класса, например:

@Dependent 
public class ProducerTest { 

Кроме того, если я заявляю, что метод производителя в тот же класс, который впрыскивает, я могу определить @Dependent области в объявлении метода производителя, но WELD печатает предупреждение в Glassfish консоли

WELD-000018: Executing producer field or method [BackedAnnotatedMethod] @Produces 
@MyNumber @Dependent public mypackage.TipicalBean.produceMyNumber() on incomplete 
declaring bean Managed Bean [class mypackage.TipicalBean] with qualifiers [@Any 
@Default] due to circular injection 

Почему? Должны ли быть определены методы производителя в ManagedBeans?

Как я использую JavaEE 7, я не создал файл beans.xml.

Благодаря

+0

Пожалуйста, разместите свой 'beans.xml', вам, вероятно, не хватает' bean-discovery-mode = "all" '. –

+0

Я не создал файл beans.xml, так как я использую CDI 1.1. Я не нашел ссылки на это поведение в отношении методов производителей среди документации. Спасибо – daschapa

ответ

1

От CDI spec:

Метод производитель должен быть по умолчанию-доступ к, общественных местах, защищенных или частных, неабстрактный метод управляемого класса бина или сессионный компонент класса ,

+2

И чтобы уточнить, ваш класс не регистрировался как управляемый компонент, потому что отсутствие beans.xml помещало вашу среду в 'bean-discovery-mode = annotated' и ваш no bean, определяющий аннотации, у него не было ничего делать с областью действия (хотя области действия являются аннотацией, определяющей компонент) –

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