Java 有没有一种在构造函数中使用一些参数创建新对象并在其中注入CDIBeans的好方法?

Java 有没有一种在构造函数中使用一些参数创建新对象并在其中注入CDIBeans的好方法?,java,dependency-injection,cdi,Java,Dependency Injection,Cdi,所以问题是,有没有一种很好的方法将某些东西注入到NotABean对象中,而NotABean对象中应该有状态,因此由new()创建 当然,在当前情况下,我可以将wouldbeeperfected作为参数传递给构造函数,但这与问题无关。有CDI 1.0和CDI 1.1两种方法。1.1方法比1.0容易得多,因此他们创建了它 以下是DeltaSpike的一个示例: 另一种不使用@Inject的方法是使用CDI 1.1实用程序类手动获取引用。因此,您可以执行以下操作,而不是注入对SomeService的引

所以问题是,有没有一种很好的方法将某些东西注入到NotABean对象中,而NotABean对象中应该有状态,因此由new()创建


当然,在当前情况下,我可以将wouldbeeperfected作为参数传递给构造函数,但这与问题无关。

有CDI 1.0和CDI 1.1两种方法。1.1方法比1.0容易得多,因此他们创建了它

以下是DeltaSpike的一个示例:

另一种不使用
@Inject
的方法是使用CDI 1.1实用程序类手动获取引用。因此,您可以执行以下操作,而不是注入对
SomeService
的引用:

   Unmanaged<Foo> fooU = new Unmanaged(Foo.class);
   Foo foo = fooU.newInstance().get();

也许您真的希望CDIBean成为一个可以组合注入参数和调用时间参数的工厂。您使用的是CDI1.1还是1.0?1.0。1.1有这样的功能吗?在1.1中更容易实现。我将在答案中包括这两个方面。
    CreationalContext<T> creationalContext = beanManager.createCreationalContext(null);

    AnnotatedType<T> annotatedType = beanManager.createAnnotatedType((Class<T>) instance.getClass());
    InjectionTarget<T> injectionTarget = beanManager.createInjectionTarget(annotatedType);
    injectionTarget.inject(instance, creationalContext);
   Unmanaged<Foo> fooU = new Unmanaged(Foo.class);
   Foo foo = fooU.newInstance().get();
   SomeService someService = CDI.current().select(SomeService.class).get();