小编das*_*apa的帖子

如果定义类未声明范围,CDI 生成器方法将不起作用

我正在本地 Glassfish 4.1.1 (WELD 2.2.2) 安装中运行一些关于 CDI 的概念验证。

我创建了一个名为 TipicalBean 的类 bean,它注入一个在生产者方法中生成的整数。

定义生产者方法的类如下所示

public class ProducerTest {

    @Produces @MyNumber @Dependent public static int getMyNumber() {
        return 100;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是行不通的。即使我将方法声明为静态

但如果将 @Dependent 作用域放入类定义中,它确实有效,如下所示:

@Dependent
public class ProducerTest {
Run Code Online (Sandbox Code Playgroud)

此外,如果我在注入它的同一个类中声明该生产者方法,我可以在生产者方法声明中定义 @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
Run Code Online (Sandbox Code Playgroud)

为什么?生产者方法必须在 ManagedBeans 中定义吗?

由于我使用的是 JavaEE 7,因此我尚未创建 …

java cdi weld glassfish-4 java-ee-7

2
推荐指数
1
解决办法
5381
查看次数

标签 统计

cdi ×1

glassfish-4 ×1

java ×1

java-ee-7 ×1

weld ×1