简要概述了Java EE中的依赖项注入,@ Resource / @ EJB和@Inject之间的区别以及它们与Spring的关系-主要是链接形式。
上下文依赖注入(CDI, JSR 299 )是Java EE 6 Web Profile的一部分,它本身基于Java依赖注入( JSR 330 ),引入了@ Inject,@ Named等。而JSR 330仅用于DI并已实现例如,由Guice和Spring撰写,CDI添加了各种EE内容,例如@RequestScoped,拦截器/装饰器,生产者,事件以及与JSF,EJB等集成的基础。EJB等Java EE组件已重新定义为基于CDI( => @Stateless现在是具有其他服务的CDI托管bean)。
CDI除了具有DI功能之外,其关键部分还在于它对bean上下文的警惕以及对bean生命周期的管理以及这些上下文中的依赖关系(例如@RequestScoped或@ConversationScoped)。
CDI是可扩展的–您可以定义新的上下文范围,嵌入式拦截器和装饰器,并使其他bean(例如,来自Spring的)可用于CDI。
检查资源:
- Java EE 6中的上下文和依赖性注入作者:Adam Bien –对CDI的基础以及它与Java EE 5中的DI有何不同的很好的解释(提示:上下文警觉)
- 幻灯片,其中包含CDI及其所有功能的概述
- 关于CDI可扩展性和SPI (例如,Seam 3基本上是一组便携式CDI扩展)
- Guice和Spring没有实现CDI(3/2011)- 也许 Spring 并没有这样做的动力 (它支持JSR 330,CDI的工作量太大)
- DZone CDI Refcard可能很方便
- CDI 1.0与Spring 3.1的功能比较:bean定义和依赖注入 :“在我在本文比较的领域,这两种技术几乎没有什么关键的区别”(尽管Spring更可微调)
- 重新加载了Java EE 6(CDI / EJB 3.1)XOR Spring Core :新项目最好从包含CDI的纯Java EE开始,并在需要时添加诸如JDBC / JMS之类的Spring实用程序
- Oracle:Java EE 6生态系统中的CDI – 62页幻灯片,其中的内容比前面提到的幻灯片更详细
注意:CDI 1.1( JSR 346 ,Java EE 7)应具有在非EE环境(即SE)中引导其的标准方法。
参考: 什么是CDI,它与@EJB和Spring有什么关系? 从我们的JCG合作伙伴在Holy Java博客上获得 。
相关文章 :
翻译自: https://www.javacodegeeks.com/2011/11/what-is-cdi-how-does-it-relate-to-ejb.html