我发现了这个问题:What is the difference between @Inject and @EJB,但我并没有变得更聪明。我以前没有做过Java EE,也没有依赖注入的经验,所以我不知道我应该使用什么?
@EJB
是一种古老的注入方式吗?在使用新的@Inject
框架的同时使用此注释时,注入是由EJB容器完成的吗?这就是区别吗?如果是这样的话,我应该使用@Inject
而不是@EJB
吗?
发布于 2011-11-15 23:08:41
@EJB
只用于注入EJB,现在已经有很长一段时间了。@Inject
可以注入任何托管bean,并且是新的CDI规范的一部分(从JavaEE6开始)。
在简单的情况下,您可以简单地将@EJB
更改为@Inject
。在更高级的情况下(例如,当您严重依赖@EJB
的属性,如beanName
、lookup
或beanInterface
时),为了使用@Inject
,您需要定义一个@Producer
字段或方法。
这些资源可能有助于理解@EJB
和@Produces
之间的区别以及如何充分利用它们:
安东尼奥·贡卡尔维斯的博客:
JBoss焊接文档:
StackOverflow:
发布于 2011-11-15 22:57:52
@Inject
可以注入任何bean,而@EJB
只能注入EJB。您可以使用这两种方法中的任何一种来注入EJB,但我更喜欢到处使用@Inject
。
发布于 2017-08-08 14:51:03
在使用@EJB和@Inject时,了解会话Bean身份方面的差异可能也很有用。根据规范,以下代码将始终为true
@EJB Cart cart1;
@EJB Cart cart2;
… if (cart1.equals(cart2)) { // this test must return true ...}
使用@Inject而不是@EJB是不一样的。
另请参阅stateless session beans identity以了解更多信息
https://stackoverflow.com/questions/8138232
复制相似问题