Dependency injection 您可以在CDI中注入生成的对象吗?

Dependency injection 您可以在CDI中注入生成的对象吗?,dependency-injection,cdi,weld,Dependency Injection,Cdi,Weld,假设我有 public class Ctrl{ @Named @Produces public My getMy(){ return new My(); } 我可以在EL表达式中使用my。没关系 但是在My类型本身中,我不能注入,例如 public class My @Inject @Random private int randomNumber; 上面my中的randomNumber字段为null 所以我的问题是:您真的不能注入生成的对象吗,或者我做错了什么吗?因为

假设我有

public class Ctrl{
        @Named @Produces public My getMy(){ return new My(); }
我可以在EL表达式中使用
my
。没关系

但是在
My
类型本身中,我不能注入,例如

public class My
    @Inject @Random private int randomNumber;
上面
my
中的
randomNumber
字段为
null


所以我的问题是:您真的不能注入生成的对象吗,或者我做错了什么吗?

因为您手动实例化了
my
类,所以它不会有依赖项注入。这是正确的

不过,有办法解决这个问题。如果您使用的是DeltaSpike,那么可以在返回bean之前使用
BeanProvider.injectFields
填充bean的注入点

如果您没有使用DeltaSpike,请在代码处设置一个峰值,以查看如何移植更改():


不过我也很好奇,为什么你不能用
@Named
注释
我的
?@JohnAment,我知道,但我想看看这是否也有效。好吧,那么我想我建议的两个选项中的任何一个都应该适用于你。
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);