Instanciação manual do Java EE 7 CDI

Eu tenho uma class com campos anotados com @Inject. Eu instancio a class usando reflection, mas eu quero o CDI para injetar instâncias para fazer os campos de instância de class. Existe uma maneira de fazer isso?

Object myInstanceWithDependecies = Class.forName(“com.package.MyClass").newInstance(); CDI.injectAll(myInstanceWithDependecies);//This is what i want 

Alguém sabe como fazer isso? Eu apreciaria se houvesse uma maneira de fazer isso sem digitalizar cada campo usando reflection.

Desde já, obrigado.

Isso faz com que o trabalho seja feito

SomeBean bean = CDI.current (). Select (SomeBean.class) .get ();

Este link descreve como usar o OpenWebBeans em um aplicativo JavaSE:

http://openwebbeans.apache.org/owbsetup_se.html

Se você quiser usá-lo para testes de unidade, eu recomendaria usar o Arquillian:

http://arquillian.org

Para que as dependencies de CDI sejam resolvidas, sua instância de com.package.MyClass deve ser um bean gerenciado (instanciado pelo contêiner); caso contrário, não será possível permitir que o contêiner resolva suas dependencies.

Para resolver seu problema, você poderia fazer uma pesquisa programática sem criar a instância por conta própria:

 CDI.current().select(Class.forName("com.package.MyClass")).get() //remember to check for ambiguous or unsatisfied dependency 

Se o seu com.package.MyClass não for gerenciado pelo CDI, não será possível, pelo CDI padrão, injetar as dependencies conforme indicado por outras pessoas.

No entanto, toda a infraestrutura está disponível. DeltaSpike oferece a funcionalidade que você está procurando. Também é possível usar este fragment de código (sem dependencies de outro código do DeltaSpike) sem include o DeltaSpike.

 @SuppressWarnings("unchecked") public static  T injectFields(T instance) { if (instance == null) { return null; } BeanManager beanManager = CDI.current().getBeanManager(); CreationalContext creationalContext = beanManager.createCreationalContext(null); AnnotatedType annotatedType = beanManager.createAnnotatedType((Class) instance.getClass()); InjectionTarget injectionTarget = beanManager.createInjectionTarget(annotatedType); injectionTarget.inject(instance, creationalContext); return instance; }