2010年02月13日

CDIのBeanManagerを使ったBean取得と手動Inject

Weldかどうかに限らず動くはず〜。
基本的なBeanの取得(例外処理は省略)は、
BeanManager bm = InitialContext.doLookup("java:comp/BeanManager");

Bean<?> bean = bm.resolve(bm.getBeans(ClassA.class));
CreationalContext<?> cc = bm.createCreationalContext(bean);
ClassA result = (ClassA)bm.getReference(bean, ClassA.class, cc);

って感じかな〜。
この場合は最後にキャストね。

んで、インスタンスのフィールドのInjectとかを手動でしたいなら、
BeanManager bm = InitialContext.doLookup("java:comp/BeanManager");

@SuppressWarnings("unchecked")
Bean<ClassA> bean = (Bean<ClassA>)bm.resolve(bm.getBeans(ClassA.class));
CreationalContext<ClassA> cc = bm.createCreationalContext(bean);
AnnotatedType<ClassA> at = bm.createAnnotatedType(ClassA.class);
InjectionTarget<ClassA> it = bm.createInjectionTarget(at);
it.inject(targetOject, cc);

って感じかな〜。
この場合は、最初にキャストかな〜。

ClassAとか継承してるとresolveで一意にならないので気をつけないとね。
posted by そら at 12:41 | TrackBack(0) | 日記
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/35292434

この記事へのトラックバック