Java 在非托管CDIBean中引用CDIBean
是否可以在使用Java 在非托管CDIBean中引用CDIBean,java,cdi,java-ee-6,openwebbeans,Java,Cdi,Java Ee 6,Openwebbeans,是否可以在使用new关键字创建的类中获取CDIBean的实例?我们目前正在对一个旧的应用程序进行一些增强,每次在我们的应用程序中查找CDI单例bean时,我们都会收到一条消息 获取参考的代码: public class ClassCreatedWithNew{ public void doSomething(){ MySingletonBean myBean = BeanManagerSupport.getInstance().getBean(MySingletonB
new
关键字创建的类中获取CDIBean的实例?我们目前正在对一个旧的应用程序进行一些增强,每次在我们的应用程序中查找CDI单例bean时,我们都会收到一条消息
获取参考的代码:
public class ClassCreatedWithNew{
public void doSomething(){
MySingletonBean myBean = BeanManagerSupport.getInstance().getBean(MySingletonBean.class);
}
}
BeanManager支持.java
public class BeanManagerSupport {
private static final Logger LOG = Logger.getLogger(BeanManagerSupport.class);
private static final BeanManagerSupport beanManagerSupport = new BeanManagerSupport();
private BeanManager beanManager;
private BeanManagerSupport() {
try {
beanManager = InitialContext.doLookup("java:comp/BeanManager");
} catch (NamingException e) {
LOG.error("An error has occured while obtaining an instance of BeanManager", e);
}
}
@SuppressWarnings("unchecked")
public <T> T getBean(Class<T> clazz) {
Iterator<Bean< ? >> iter = beanManager.getBeans(clazz).iterator();
if (!iter.hasNext()) {
throw new IllegalStateException("CDI BeanManager cannot find an instance of requested type " + clazz.getName());
}
Bean<T> bean = (Bean<T>) iter.next();
return (T) beanManager.getContext(bean.getScope()).get(bean);
}
public static BeanManagerSupport getInstance(){
return beanManagerSupport;
}
}
公共类BeanManager支持{
私有静态最终记录器LOG=Logger.getLogger(BeanManagerSupport.class);
私有静态最终BeanManager支持BeanManager支持=新建BeanManager支持();
专用BeanManager BeanManager;
私有BeanManager支持(){
试一试{
beanManager=InitialContext.doLookup(“java:comp/beanManager”);
}捕获(NamingE例外){
LOG.error(“获取BeanManager实例时出错”,e);
}
}
@抑制警告(“未选中”)
公共T getBean(类clazz){
Iterator>iter=beanManager.getBeans(clazz.Iterator();
如果(!iter.hasNext()){
抛出新的IllegalStateException(“CDI BeanManager找不到请求类型的实例”+clazz.getName());
}
Bean=(Bean)iter.next();
return(T)beanManager.getContext(bean.getScope()).get(bean);
}
公共静态BeanManager支持getInstance(){
返回BeanManager支持;
}
}
有两种可能的解决方案
CDI.current().get(MySingletonClass.class)代码>
请参阅Apache OpenWebBeans。您想使用new!创建一个单音CDIBean实例吗@法兰加马里-不,不是这样的。查看我发布的代码以使其更清晰您是否尝试过
CDI.current().get(MySingletonClass.class)
?