假设我有两个类,首先是一个没有任何属性,字段或注释的类:
public class B {}
Run Code Online (Sandbox Code Playgroud)
和一个注入B的类,如下所示:
public class A {
@Inject
private B b;
public B getB() {
return b;
}
}
Run Code Online (Sandbox Code Playgroud)
现在A级在我们使用之前是没用的,所以有两种选择:
如果A被注入,CDI管理它并且足够注入B,其具有隐含的@Dependent范围.很酷,就是我想要的.
但是,如果我手动构造A(假设在工厂或构建器中),CDI完全忽略我的对象并且不会注入类型B的对象.
示例我在谈论它什么时候不起作用,这里对象a将始终保持为null:
public class Builder {
@Inject
private A a;
public static Builder ofTypeSomething() {
// do some magic here
return new Builder();
}
private Builder() {
// and some more here
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
A类是一个有效的托管bean,并且有一个有效的范围,就像B类一样.即使我将@Producer添加到静态方法,它也不会改变任何东西(这很好,因为静态方法的想法是调用它,不要在任何地方注入Builder).