注入期间的CDI Bean范围无效

时间:2016-02-26 08:18:20

标签: jsf cdi

我希望在注射过程中将CD-po中的pojo bean放在移动范围内。

我创建了一个普通bean并在@javax.enterprise.context.ApplicationScoped Managed Bean中注入了@javax.faces.bean.ViewScoped,就像这样:

@Inject
@ApplicationScoped
Pojo pojo;

// POJO Class

Class Pojo {
  private String var;

  public Pojo() {

  }

  public String getVar() {
    return var;
  }

  public void setVar(String var) {
    this.var = var;
  }
}

当我使用相同的语法注入时,无法在新的视图bean中恢复Pojo bean的填充值。

但是当我在类声明中使用@ApplicationScoped时,它会起作用,然后是非范围注入,如下所示:

@ApplicationScoped
Class Pojo {
      private String var;

注射:

@Inject
Pojo pojo;

当我创建一个生产者和限定符时,前一个案例得到解决,但我觉得这将是一个我不应该做的开销。作为CDI的新手,我想问一下我在这里真正缺少的东西。

1 个答案:

答案 0 :(得分:1)

范围和上下文管理是CDI中非常强大的功能。它也是组件业务逻辑的一部分(@ApplicationScoped bean的开发方式与@RequestScoped不同),这就是范围与bean连接的原因定义。 注入点只是您使用bean的地方,而不是您定义它的地方,因此无法在规格级别的注入点定义bean的范围。 现在,如果你真的想使用这个功能,你可以开发一个便携式扩展来增加这种可能性。但是你可能也必须在限定符系统上工作,因为范围没有用在bean解析过程中(即,如果它们不在,那么在不同范围内具有相同类型的2个bean会对于给定的注入点发生冲突。 ; t有特定的限定词)。