问题
我发现了这个问题:What is the difference between @Inject and @EJB但我没有明白。我以前没有完成Java EE,也没有依赖注入的经验,所以我不明白我应该使用什么?
是@EJB和旧的注射方式?在使用@Inject时使用此批注时EJB容器是否完成注入使用新的CDI框架?这是不同的,如果是这种情况,我应该使用@Inject而不是@EJB吗?
#1 热门回答(161 赞)
@EJB
仅用于注入EJB,现在可以使用很长时间了.@Inject
可以注入任何托管bean,并且是新CDI规范的一部分(自Java EE 6起)。
在简单的情况下,你只需更改@EJB
至@Inject
。在更高级的情况下(例如,当你严重依赖于988557104的属性,如beanName
,lookup
或beanInterface
)时,为了使用@Inject
,你需要定义a@Producer
字段或方法。
这些资源可能有助于理解@EJB
和@Produces
之间的差异以及如何充分利用它们:
Antonio Goncalves的博客:
CDI Part I
CDI Part II
CDI Part III
JBoss Weld文档:
CDI and the Java EE ecosystem
堆栈溢出:
Inject @EJB bean based on conditions
#2 热门回答(30 赞)
@Inject
可以注入任何bean,而@EJB
只能注入EJB。你可以使用任何一个注入EJB,但我更喜欢@Inject
。
#3 热门回答(12 赞)
**更新:**这个答案可能不正确或已过时。请参阅评论了解详情。
我从@Inject
切换到@EJB
,因为318898985允许循环注射而47945320pukes就可以了。
详细信息:我需要@PostConstruct
来调用an@Asynchronous
方法,但它会同步执行。进行异步调用的唯一方法是让原始调用是另一个bean的方法,并让它回调原始bean的方法。要做到这一点,每个bean需要引用另一个 - 因此circular.@Inject
失败了这个任务而6.89680288工作。