假设我有两个类,第一个类没有任何属性、字段或注释:
public class B {}
还有一个注入 B 的类,如下所示:
public class A {
@Inject
private B b;
public B getB() {
return b;
}
}
现在 A 类在我们使用它之前是毫无用处的,所以有两种选择:
- @注入它
- 使用可靠的“new A()”手动构建它
如果 A 被注入,CDI 会对其进行管理,并且会很好地注入具有 @Dependent 隐式作用域的 B。酷,正是我想要的。
但是,如果我手动构造 A(假设在工厂或构建器中),CDI 将完全忽略我的对象并且不会注入 B 类型的对象。
示例我说的是当它不起作用时,这里对象 a 将始终保持为空:
public class Builder {
@Inject
private A a;
public static Builder ofTypeSomething() {
// do some magic here
return new Builder();
}
private Builder() {
// and some more here
}
}
为什么这不起作用?
类 A 是一个有效的托管 bean 并且具有有效的范围,就像类 B 一样。即使我将 @Producer 添加到静态方法中,它也不会改变任何东西(这很好,因为静态方法的想法是调用它,不要在任何地方注入 Builder)。