2016-04-10 27 views
-1

Class1 adında bir sınıfım var. Bu tür sınıfların ne olduğunu bilmiyorum ama 'u bildiğim gibi, sınıfın içinde @ Açıklama, Bu gibi alanların gibi alanların enjekte edildiği Nesne örneklerinin olması gerektiği anlamına gelir. Bildiğim şey, sınıfın bir varsayılan denetleyiciye sahip olmasıdır. Ben newInstance yöntemiyle sınıf örneğini oluşturmak için böyle denetleyici kullanmak:Java EE CDI El ile Enjeksiyon

Object class1Object = Class.forName("Class1").newInstance(); 

sorun “Class1” nin bağımlılıkları nesne örneği alanlarda enjekte edilmiyor, o ve ben ben gibi olduğunu Onun tamamen normal anlıyorum sınıfı manuel olarak başlatıyorum.

CDI.injectAllDependencies(class1Object); 

Herhangi fikirleri: Ben bunu yapmak için sihirli bir yöntem gerekir, bağımlılıklar enjekte o almak gerekir, bu yüzden? Lütfen dersi manuel olarak başlatmayı durdurmama izin vermeyin. Benim durumum böyle bir yaklaşımı gerektiriyor. Şimdiden teşekkürler.

+0

numaralı belgede açıklandığı gibi ayarlamak için yansımayı kullanabilirsiniz. Bu, göründüğü gibi çalışıyorsa bir seçenek olabilir. "Class1" sınıfını başlatır ve tüm bağımlılıklarını enjekte eder. Ben haklı mıyım –

+0

Bunu programlı olarak kaydetmenin bir yolu var mı, beans.xml? –

cevap

0

bunu önermiyoruz bile, yansıma kullanarak @ Enjekte ile açıklamalı tüm alanları alabilirsiniz:

for (Field field : Class.forName("Class1").getFields()) { 
    if (field.isAnnotationPresent(Inject.class)) { 
     //do all your nasty stuff here 
    } 
} 

sonra yapabilirsiniz CDI gelen alanın türünün bir örneği almak istiyorsanız BeanManager'a bunun için sorun. http://dominikdorn.com/2010/04/cdi-weld-manual-bean-lookup'a bir göz atın. Örneğe sahip olduktan sonra alanı Field API'sinde (https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html#set-java.lang.Object-java.lang.Object-)