У меня есть некоторое доказательство концепции в локальной установке 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.
Благодаря
Пожалуйста, разместите свой 'beans.xml', вам, вероятно, не хватает' bean-discovery-mode = "all" '. –
Я не создал файл beans.xml, так как я использую CDI 1.1. Я не нашел ссылки на это поведение в отношении методов производителей среди документации. Спасибо – daschapa