2
我使用Google来获取CDI bean的上下文引用。我发现了2种方式:获取Java CDI bean的上下文引用的正确方法
1.使用beans.iterator()
public static <T> T getReference(BeanManager bm, Class<? extends T> type, Annotation... qualifiers) {
Set<Bean<?>> beans = bm.getBeans(type, qualifiers);
if (beans == null || beans.isEmpty()) {
throw new IllegalArgumentException("Bean not found.");
}
// Using beans.iterator()
Bean<T> bean = (Bean<T>) beans.iterator().next();
return (T) bm.getReference(bean, type, bm.createCreationalContext(bean));
}
2.使用BeanManager.resolve
public static <T> T getReference(BeanManager bm, Class<? extends T> type, Annotation... qualifiers) {
Set<Bean<?>> beans = bm.getBeans(type, qualifiers);
if (beans == null || beans.isEmpty()) {
throw new IllegalArgumentException("Bean not found.");
}
// Using BeanManager.resolve()
Bean<T> bean = (Bean<T>) bm.resolve(beans);
return (T) bm.getReference(bean, type, bm.createCreationalContext(bean));
}
我的问题是:哪种方式是正确的?如果两者都是正确的,那么每一个的上下文使用是什么?
谢谢!
谢谢你的解释! – Loc 2014-11-05 14:47:36