注入期间的 CDI Bean 作用域不起作用
CDI Bean Scoping during Injection is not working
我想在注入期间为 CDI 中的 pojo bean 提供移动范围。
我创建了一个普通 bean,并像这样在 @javax.faces.bean.ViewScoped
托管 Bean 中注入了与 @javax.enterprise.context.ApplicationScoped
相同的内容:
@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 的填充值。
但是当我在 class 声明中使用 @ApplicationScoped
时它起作用,然后是非作用域注入,如下所示:
@ApplicationScoped
Class Pojo {
private String var;
注入:
@Inject
Pojo pojo;
当我制作制作人和限定词时,前一种情况得到解决,但我觉得这是我应该避免的开销。作为CDI的新手,我想问一下我在这里真正缺少的是什么。
范围和上下文管理是 CDI 中非常强大的功能。它也是组件业务逻辑的一部分(@ApplicationScoped
bean 的开发方式与 @RequestScoped
不同),这就是范围是 link 到 bean 定义的原因。
注入点只是您使用 bean 的地方,而不是定义它的地方,因此无法在规范级别的注入点定义 bean 的范围。
现在,如果您真的想使用此功能,您可以开发一个可移植的扩展来增加这种可能性。但是您可能还必须在限定符系统上工作,因为在 bean 解析过程中不使用范围(即,如果 2 个在不同范围内具有相同类型的 bean 没有特定的注入点,它们将发生冲突预选赛)。
我想在注入期间为 CDI 中的 pojo bean 提供移动范围。
我创建了一个普通 bean,并像这样在 @javax.faces.bean.ViewScoped
托管 Bean 中注入了与 @javax.enterprise.context.ApplicationScoped
相同的内容:
@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 的填充值。
但是当我在 class 声明中使用 @ApplicationScoped
时它起作用,然后是非作用域注入,如下所示:
@ApplicationScoped
Class Pojo {
private String var;
注入:
@Inject
Pojo pojo;
当我制作制作人和限定词时,前一种情况得到解决,但我觉得这是我应该避免的开销。作为CDI的新手,我想问一下我在这里真正缺少的是什么。
范围和上下文管理是 CDI 中非常强大的功能。它也是组件业务逻辑的一部分(@ApplicationScoped
bean 的开发方式与 @RequestScoped
不同),这就是范围是 link 到 bean 定义的原因。
注入点只是您使用 bean 的地方,而不是定义它的地方,因此无法在规范级别的注入点定义 bean 的范围。
现在,如果您真的想使用此功能,您可以开发一个可移植的扩展来增加这种可能性。但是您可能还必须在限定符系统上工作,因为在 bean 解析过程中不使用范围(即,如果 2 个在不同范围内具有相同类型的 bean 没有特定的注入点,它们将发生冲突预选赛)。