如果定义 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.