これを知っていると、DIできないコンポーネントでManagedBeanを利用(例えば、JSFやJSPのスクリプトレット内)できたりします。
例として、以下のようなManagedBeanがあったとします。
- package sample;
- import java.util.Date;
- import javax.enterprise.context.RequestScoped;
- import javax.inject.Named;
- @RequestScoped
- @Named("test1")
- public class TestBean1 {
- public Date getDate() {
- return new Date();
- }
- }
これを以下のように取得する。
- InitialContext ic = new InitialContext();
- BeanManager manager =
- (BeanManager)ic.lookup("java:comp/BeanManager");
- Set<Bean<?>> beans = manager.getBeans(
- TestBean1.class,
- new AnnotationLiteral<Default>() {});
- Bean<?> bean = manager.resolve(beans);
- TestBean1 obj = (TestBean1)manager.getReference(
- bean,
- TestBean1.class,
- manager.createCreationalContext(bean));
9行目のresolveは、5行目でBeanが1つに絞られているからできるのであり、もし絞られていないようであれば、5行目で取得したSet<Bean<?>>をQualifierやNameから要求にあったBeanを取得してgetReferenceを行えば良いです。
また、EL名で取得したい場合は、5行目を
- Set<Bean<?>> beans = manager.getBeans("test1");
0 件のコメント:
コメントを投稿