CDI Eager Application scoped bean

▼魔方 西西 提交于 2019-12-01 04:12:47

问题


Since @ManagedBean(eager = true) will be deprecated, How do you create a eager application scoped cdi bean?


回答1:


Solved this by making use of CDI extension framework:

  1. Create Qualifier:

    @Qualifier
    @Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER,     ElementType.TYPE})
    @Retention(value = RetentionPolicy.RUNTIME)
    public @interface Eager {
    }
    
  2. Create Extension implementation with observer method:

    public class EagerCDIExtension implements Extension {
    
            public void afterDeploymentValidation(@Observes AfterDeploymentValidation event, BeanManager beanManager) {
            beanManager.getBeans(Object.class, new AnnotationLiteral<Eager>() {
            }).parallelStream().filter(bean -> bean.getBeanClass().isAnnotationPresent(ApplicationScoped.class)).forEach(bean -> {
                beanManager.getReference(bean, bean.getBeanClass(), beanManager.createCreationalContext(bean)).toString();
            });
        }
    }
    
  3. Create: META-INF/services/javax.enterprise.inject.spi.Extension

  4. Register extension implementatoin class in above file i.e:

    pypackage.EagerCDIExtension
    


来源:https://stackoverflow.com/questions/22781554/cdi-eager-application-scoped-bean

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!