【发布时间】:2018-02-04 22:13:46
【问题描述】:
将 java.util.Random 注入 Bean 时,部署失败:
CDI 部署失败:WELD-001408:在注入点 [BackedAnnotatedField] @Inject myPackage.MyBean.random 带有限定符 @Default 的随机类型的依赖关系不满足
问题:为什么不能注入 java.util.Random 类的实例?
我创建了一个具有类似属性的 A 类(例如具有默认可见性的最终方法),可以毫无问题地注入。代码如下:
@Named
@SessionScoped
public class MyBean implements Serializable {
@Inject private java.util.Random random; // (R)
@Inject private A a;
...
}
public class A implements Serializable {
int n;
public A() { System.out.println("A"); }
public A(int n) { this.n = n; }
final int nextInt(int bound) { return bound -n; }
}
如果行 (R) 被注释掉,一切都部署并运行良好。
【问题讨论】:
-
你有
java.util.Random的制作人吗? -
没有。我只想让容器应用 Random 的无参数构造函数。
-
那你需要声明一个生产者来创建类的实例。
-
但是为什么注入 A 类?也没有制作人。
-
添加一个缺失的信息。 CDI 规范实际上要求默认排除
java.*中的所有内容。