【发布时间】:2016-02-25 17:11:54
【问题描述】:
我正在本地 Glassfish 4.1.1 (WELD 2.2.2) 安装中运行一些关于 CDI 的概念验证。
我创建了一个名为 TipicalBean 的类 bean,它注入了在生产者方法中生成的整数。
定义生产者方法的类是这样的
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"。 -
我没有创建任何 beans.xml 文件,因为我使用的是 CDI 1.1。我在文档中没有找到任何关于生产者方法的引用。谢谢
标签: java cdi glassfish-4 java-ee-7 weld