2014-06-29 64 views
1

假設我有,您可以注入CDI中的生成對象嗎?

public class Ctrl{ 
     @Named @Produces public My getMy(){ return new My(); } 

我可以使用EL表達式與它my。所以沒關係。

但在My類型本身,我不能注入,例如,上述

public class My 
    @Inject @Random private int randomNumber; 

randomNumber字段中mynull

所以我的問題是:你確實不能注入一個生成的對象,或者我做錯了什麼?

+0

我也很好奇,雖然,你爲什麼不能只是用'@ Named'註釋'My'? –

+0

@JohnAment,我知道,但我想看看這是否也適用。 – ericj

+0

好的,那麼我認爲我提出的任何選項都適合你。 –

回答

2

由於您手動實例化了My類,因此不會有依賴關係注入。那是對的。

雖然有辦法解決這個問題。如果您使用DeltaSpike,則可以使用BeanProvider.injectFields在返回之前填充bean的注入點。

如果你不使用DeltaSpike,必須在代碼中的峯值,看看你能做些什麼來港的變化(https://github.com/apache/deltaspike/blob/master/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java#L395):

BeanManager beanManager = ....; //however you get your bean manager. 
CreationalContext creationalContext = beanManager.createCreationalContext(null); 
AnnotatedType annotatedType = beanManager.createAnnotatedType(instance.getClass()); 
InjectionTarget injectionTarget = beanManager.createInjectionTarget(annotatedType); 
injectionTarget.inject(instance, creationalContext); 
相關問題