2016-04-10 20 views
-1

Class1という名前のクラスが1つあります。私はそのようなクラスのフィールドが何であるかはわかりませんが、私はそのようなクラスにフィールドがあることを知っています 注釈@Injectを使用するフィールドには、 のフィールドにオブジェクトインスタンスを注入する必要があります。私が知っていることは、クラスにデフォルトコントローラーがあることです。 Iは、newInstanceメソッドを介してクラスをインスタンス化する そのようなコントローラを使用する:Java EE CDI手動注入

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

問題は「クラス1」の依存性は、オブジェクト・インスタンス・フィールドに注入されていない、ということであると私は私のように、その完全に正常に理解クラスを手動でインスタンス化します。私はそうする魔法の方法を必要とし、依存関係が注入されたことを取得する必要があり、そう:

CDI.injectAllDependencies(class1Object); 

任意のアイデア? クラスを手動でインスタンス化するのをやめさせることを期待しないでください。私の状況はそのようなアプローチが必要です。前もって感謝します。

+0

いいえ、これはオプションとして使用できます。 "Class1"クラスをインスタンス化し、すべての依存関係を注入します。私は正しい? –

+0

beans.xmlによってではなく、プログラムで登録する方法はありますか? –

答えて

0

私はそれをお勧めしていない場合でも、あなたはリフレクションを使用して@Injectでアノテートすべてのフィールドを取得することができます:

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

あなたは、あなたのことが可能CDIからフィールドの型のインスタンスを取得したい場合それをBeanManagerに依頼してください。 http://dominikdorn.com/2010/04/cdi-weld-manual-bean-lookupをご覧ください。インスタンスを作成したら、リフレクションを使用して、フィールドAPI(https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html#set-java.lang.Object-java.lang.Object-)に記載されているようにインスタンスにインスタンスを設定できます。

関連する問題