假設我有兩個類,第一類沒有任何屬性,字段或註釋:CDI與非託管對象
public class B {}
並得到乙注入,像這樣一類:
public class A {
@Inject
private B b;
public B getB() {
return b;
}
}
現在,A類是相當無用的,直到我們使用它,那麼有兩種選擇:
- @Inject它
- 手動構造它,使用可信賴的「新的A()」
如果A被注入,CDI管理它,是一種足以注入B,其具有@Dependent的隱式範圍。很酷,就是我想要的。
但是,如果我手動構建A(讓我們在工廠或建築商說的),CDI完全忽略了我的對象,並不會注入型B的對象
例子中,我在談論它的時候不工作,在這裏反對一個將永遠留空:
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)。
我知道這不是神奇的東西,我明白,容器不知道任何有關對象。那麼問題是:CDI(我使用Weld)如何讓我使用工廠? – Mythica 2011-02-02 11:02:23