在没有 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。