上下文依賴注入(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博客上獲得 。
- Java EE6 CDI,命名組件和限定符
- Java EE6裝飾器:在注入時裝飾類
- Java模塊化方法–模塊,模塊,模塊
- 在領域驅動的設計,貧乏的領域模型,代碼生成,依賴項注入等方面……
- 基本的EJB參考,注入和查找
- Java教程和Android教程列表
翻譯自: https://www.javacodegeeks.com/2011/11/what-is-cdi-how-does-it-relate-to-ejb.html