使用哪种方法注入 EJB?

Which method to use for injecting EJB?

我已经在网上和 SO 上阅读了很多帖子,但我仍然不清楚使用哪个注释来注入 EJB。

任何人都可以指导何时使用哪个注解来注入 EJB(以及可能的优缺点):

1) @EJB
2) @Resource
3) @Inject

这可能是一个基本问题,我确实在寻找答案,但我对此还不是很清楚。

我从未见过可以使用 @Resource 注入 EJB 的地方。它可能在某些服务器上工作,但不太可能便携。

@EJB vs @Inject的问题比较复杂

CDI 和 @Inject 已添加到 Java EE 6 规范中。可以将 EJB @Inject 注入到 CDI bean 中,但不能在太多其他(如果有的话)地方。

Java EE 7 规范将此基本统一到可以在大多数(如果不是全部)地方互换使用 @Inject@EJB 的程度。本质上,所有 "sub" 规范(例如 EJB 规范本身、servlet 规范、JAX-WS、JAX-RS 等)都必须更新以支持 @Inject 以及 @EJB。但是,如果您需要指定 @EJB 注释上可用的任何属性,那么这些属性在 @Inject 上不可用。

因此,如果您 运行 在符合 Java EE 7 的环境中并且不需要任何 @,请随时使用 @Inject EJB 属性,否则使用 @EJB.