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