1
有沒有什麼方法可以注入返回接口的具體實現@Produces
?聲明@Inject作爲@Produces返回接口的具體實現
SomeClassImpl implements SomeClass {
public Integer iField;
}
製作類:
@Produces
public SomeClass produceChild(){
SomeClassImpl impl = new SomeClassImpl();
impl.iField = 17;
return impl;
}
Consumer類:
@Inject SomeClassImpl classImpl;
編輯
的企圖@Inject SomeClassImpl
不強迫容器使用@Produces
方法,返回超類型SomeClass
。
爲什麼可以通過@Inject
父類型(沒有生產者)注入子類型,但沒有變種通過@Produces
父類型注入子類型?
使用[預選賽](https://docs.oracle.com/javaee/6/tutorial/doc/gjbck.html),如果你有一個以上的實現一個接口 – ares
參見[這個答案](HTTP的: //stackoverflow.com/questions/22982422/cdi-ambiguous-dependency-with-produces-why)。 – Casey
關於你的編輯,因爲你的'@ Produces'方法產生一個'SomeClass'實例,而不是'SomeClassImpl'實例,它可以返回任何'SomeClass'的實現,而不僅僅是'SomeClassImpl'實例。你可以通過注入'SomeClass'(不是實現)並使用限定符來修復它,或者修改你的'@ Produces'方法來返回'SomeClassImpl'。 – Casey