小编jde*_*sey的帖子

只获取在线CDI托管bean

我的目标是从JSF2 ExceptionHandlerWrapper中获取所有服务中CDI托管bean(某个父类)的集合.请注意,异常处理程序部分很重要,因为该类本身不是有效的注入目标.所以我的假设(可能不正确)是我唯一的路线是通过BeanManager编程的.

使用BeanManager.getBeans,我可以成功获取可用于注入的所有bean的集合.我的问题是,当使用BeanManager.getReference来获取bean的上下文实例时,如果bean尚不存在,则将创建该bean.所以我正在寻找一种只返回实例化bean的替代品.下面的代码是我的出发点

public List<Object> getAllWeldBeans() throws NamingException {
    //Get the Weld BeanManager
    InitialContext initialContext = new InitialContext();
    BeanManager bm = (BeanManager) initialContext.lookup("java:comp/BeanManager");

    //List all CDI Managed Beans and their EL-accessible name
    Set<Bean<?>> beans = bm.getBeans(AbstractBean.class, new AnnotationLiteral<Any>() {});
    List<Object> beanInstances = new ArrayList<Object>();

    for (Bean bean : beans) {
        CreationalContext cc = bm.createCreationalContext(bean);
        //Instantiates bean if not already in-service (undesirable)
        Object beanInstance = bm.getReference(bean, bean.getBeanClass(), cc);
        beanInstances.add(beanInstance);
    }

    return beanInstances;
}
Run Code Online (Sandbox Code Playgroud)

cdi jsf-2

6
推荐指数
1
解决办法
1941
查看次数

标签 统计

cdi ×1

jsf-2 ×1