假设我有,
public class Ctrl{
@Named @Produces public My getMy(){ return new My(); }
我可以在其中使用带有my
的EL表达式。所以没关系。
但是在My
类型中,我无法注入,例如,
public class My
@Inject @Random private int randomNumber;
上面randomNumber
中的my
字段为null
。
所以我的问题是:你真的不能注入生产的物体,或者我做错了什么?
答案 0 :(得分:3)
由于您手动实例化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);