【问题标题】:CDI Eager Application scoped beanCDI Eager Application 范围 bean
【发布时间】:2014-04-01 09:18:35
【问题描述】:

由于@ManagedBean(eager = true) 将被弃用,您如何创建急切的应用程序范围的cdi bean

【问题讨论】:

    标签: cdi jsf-2.2


    【解决方案1】:

    利用 CDI 扩展框架解决了这个问题:

    1. 创建限定符:

      @Qualifier
      @Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER,     ElementType.TYPE})
      @Retention(value = RetentionPolicy.RUNTIME)
      public @interface Eager {
      }
      
    2. 使用观察者方法创建扩展实现:

      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. 创建:META-INF/services/javax.enterprise.inject.spi.Extension

    4. 在上面的文件中注册扩展实现类,即:

      pypackage.EagerCDIExtension
      

    【讨论】:

    • 通过这种方式,我需要将任何注入标记为@Any@Eager。是真的吗?
    • 不,如果我是对的,豆子本身,所以只有一个地方
    猜你喜欢
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 2011-05-13
    • 2012-05-04
    • 2017-11-26
    相关资源
    最近更新 更多