如果定义 class 未声明范围,则 CDI 生产者方法不起作用
CDI producer method not working if defining class doesn't declare a scope
我正在 运行 本地 Glassfish 4.1.1 (WELD 2.2.2) 安装中关于 CDI 的一些概念证明。
我创建了一个名为 TipicalBean 的 class bean,它注入了一个在生产者方法中生成的整数。
定义生产者方法的class如下所示
public class ProducerTest {
@Produces @MyNumber @Dependent public static int getMyNumber() {
return 100;
}
}
这行不通。即使我声明方法 static
但是如果将 @Dependent 范围放在 class 定义中,它确实有效,如下所示:
@Dependent
public class ProducerTest {
此外,如果我在注入它的同一个 class 中声明生产者方法,我可以在生产者方法声明中定义 @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
这是为什么?生产者方法是否必须在 ManagedBean 中定义?
因为我使用的是 JavaEE 7,所以我还没有创建 beans.xml 文件。
谢谢
来自CDI spec:
A producer method must be a default-access, public, protected or
private, non-abstract method of a managed bean class or session bean
class.
我正在 运行 本地 Glassfish 4.1.1 (WELD 2.2.2) 安装中关于 CDI 的一些概念证明。
我创建了一个名为 TipicalBean 的 class bean,它注入了一个在生产者方法中生成的整数。
定义生产者方法的class如下所示
public class ProducerTest {
@Produces @MyNumber @Dependent public static int getMyNumber() {
return 100;
}
}
这行不通。即使我声明方法 static
但是如果将 @Dependent 范围放在 class 定义中,它确实有效,如下所示:
@Dependent
public class ProducerTest {
此外,如果我在注入它的同一个 class 中声明生产者方法,我可以在生产者方法声明中定义 @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
这是为什么?生产者方法是否必须在 ManagedBean 中定义?
因为我使用的是 JavaEE 7,所以我还没有创建 beans.xml 文件。
谢谢
来自CDI spec:
A producer method must be a default-access, public, protected or private, non-abstract method of a managed bean class or session bean class.