EJB bean和CDI bean以及Injection

时间:2014-12-14 17:38:33

标签: java java-ee dependency-injection ejb cdi

阅读完毕后,

我仍然对以下事情感到困惑,如果我错了,请纠正我。

  1. 与bean.xml在同一个包中的所有类都是CDI bean 除了注释为session / message / singleton的类。
  2. 只能使用@EJB(在另一个EJB中)注入EJB,而两者都是 可以使用@inject(在EJB bean中)注入CDI bean和EJB bean 或CDI bean)。
  3. 类注释为@Stateless(例如)使用注入 @Inject仍然是一个EJB bean,而不是CDI bean,并且仍然是 由EJB容器管理,具有池和的所有优点 事务性的。
  4. 非常感谢。 :)

1 个答案:

答案 0 :(得分:7)

我会做出以下更正:

  1. 与beans.xml相同的存档中的所有类都是CDI bean,包括 EJB。

  2. 只能使用@EJB(在另一个EJB 或任何其他EE托管对象,包括CDI bean 中)注入EJB,而CDI bean和EJB bean都可以使用@inject(在EJB bean或CDI bean中)。

  3. 使用@Inject注入的注释为@Stateless(例如)的类仍然是EJB bean,如果在bean中,它也可能是 CDI bean 部署档案; 无论,它仍然由EJB容器管理,具有汇集和事务的所有优点。

  4. 值得注意的是,CDI托管bean是可以@Inject到另一个CDI bean的任何东西,并且本身可以使用@Inject,这适用于所有EJB,并且可以使用@EJB将EJB注入任何其他EE托管bean(EJB,servlet,CDI托管bean等)。