Я запускаю некоторое доказательство концепции в локальной установке Glassfish 4.1.1 (WELD 2.2.2) о CDI.
Я создал bean-компонент класса с именем TipicalBean, который вводит целое число, полученное в методе производителя.
Класс, определяющий метод производителя, выглядит так
public class ProducerTest {
@Produces @MyNumber @Dependent public static int getMyNumber() {
return 100;
}
}
Это не работает. Даже если я объявлю метод static
Но это работает, если поместить область @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"
. - person Alexander Langer   schedule 23.11.2015