在没有 jsf 的 ejb 项目中使用 cdi
usage of cdi's in a ejb project without jsf
我正在学习 javaEE,我在某个地方读到过 cdi 的主要用途,当时首先是在 jsf 管理的 bean 中,带有 @requestscope、@applicationscope 等注释。现在在较新的 javaEE 版本中,cdi 随处可用(即使在 ejb bean 中)所以问题是,我如何注释一个 class ,它将被注入到我的本地无状态 ejb 中?我问这个是因为 @RequestScope 之类的注释和所有这些都来自 jsf,但我没有使用 jsf。 @Default 是否足够,因为它无论如何都被标记为默认值? @Dependent 是更好的选择吗?
@Stateless
public class FooEjb{
@Inject Bar b;
}
// what annotation to put here?
public class Bar {
...
}
是的,您不需要 JSF 即可在 JavaEE 中使用 CDI。
如果您在不使用 JSF 的情况下使用 CDI,请使用 javax.enterprise.context
包中的范围注释。
@Default
是一个 qualifier,顾名思义就是默认限定符。如果你的容器中有多个implementations/instances相同的class,那么你可以使用限定符来区分
@Dependent
是一个 scope,这是默认范围。这意味着它将取决于它注入的 class 的范围。每次 class 的新实例将被注入 @Dependent
class 的新实例它被注入的是创建的。
要启用 CDI,您需要将 beans.xml
文件放入 Web 项目的 WEB-INF
目录或 EAR 或 EJB 项目的 META-INF
目录中。
根据 java ee documentation,您的情况不需要注释。一个简单的 POJO 是一个可注入的 bean,并接收 @Default
注释。无需使用 JSF。
我正在学习 javaEE,我在某个地方读到过 cdi 的主要用途,当时首先是在 jsf 管理的 bean 中,带有 @requestscope、@applicationscope 等注释。现在在较新的 javaEE 版本中,cdi 随处可用(即使在 ejb bean 中)所以问题是,我如何注释一个 class ,它将被注入到我的本地无状态 ejb 中?我问这个是因为 @RequestScope 之类的注释和所有这些都来自 jsf,但我没有使用 jsf。 @Default 是否足够,因为它无论如何都被标记为默认值? @Dependent 是更好的选择吗?
@Stateless
public class FooEjb{
@Inject Bar b;
}
// what annotation to put here?
public class Bar {
...
}
是的,您不需要 JSF 即可在 JavaEE 中使用 CDI。
如果您在不使用 JSF 的情况下使用 CDI,请使用 javax.enterprise.context
包中的范围注释。
@Default
是一个 qualifier,顾名思义就是默认限定符。如果你的容器中有多个implementations/instances相同的class,那么你可以使用限定符来区分
@Dependent
是一个 scope,这是默认范围。这意味着它将取决于它注入的 class 的范围。每次 class 的新实例将被注入 @Dependent
class 的新实例它被注入的是创建的。
要启用 CDI,您需要将 beans.xml
文件放入 Web 项目的 WEB-INF
目录或 EAR 或 EJB 项目的 META-INF
目录中。
根据 java ee documentation,您的情况不需要注释。一个简单的 POJO 是一个可注入的 bean,并接收 @Default
注释。无需使用 JSF。