これを知っていると、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 件のコメント:
コメントを投稿