php cdi_DI / CDI –基础
php cdi
簡介(DI / CDI基礎)
首先,我認為對此會有一些困惑,但事實是,它們是相同的–不同之處在于用法及其用途。
DI(依賴項注入)是一個通用術(shù)語–此功能基本上是在任何應用程序上進行Bean發(fā)現(xiàn)和Bean連接過程的功能。 它不僅可以在應用程序中使用它,還可以在單??元測試和模擬中使用它。 當然,這里有很多DI框架,包括:Guice,Seam,Spring(Seam和Spring擴展了DI方案,并制定了自己的框架),EJB 3.x和CDI本身。
另一方面,CDI結(jié)合了所有這些技術(shù),并向組件引入了生命周期–這使得DI技術(shù)得以統(tǒng)一,從而使新功能的開發(fā)變得直截了當且可行。 您可以將Seams生命周期映射與以JPA作為其持久層的Spring MVC結(jié)合在一起-這些技術(shù)都是單獨創(chuàng)建的,但都與CDI結(jié)合使用,應用程序開發(fā)人員可以將它們結(jié)合在一起以創(chuàng)建和開發(fā)JEE應用程序。
我將需要分解主題,因為我肯定會在這里用單詞和字母讓每個人感到厭煩:
我將分別為每個帖子創(chuàng)建帖子!
讓我們開始!
SPI(服務編程接口)
它還具有所謂的SPI-顯然是與API一起提供的功能集,但完全具有不同的用途。
- API是您為實現(xiàn)目標而調(diào)用和使用的類/接口/方法/…的描述。
- SPI是您為實現(xiàn)目標而擴展和實現(xiàn)的類/接口/方法/…的描述。
使用SPI,您實際上可以擴展JEE6以創(chuàng)建自己的不同框架,從而展示可移植性和可擴展性。 ( 但我稍后會介紹 )。
為什么選擇CEE for JEE6?
CDI已經(jīng)出現(xiàn)在JEE5(J2EE)中,并取得了巨大的成功。 它的方法使很多新開發(fā)受益,最終簡化了整個開發(fā)過程。 在JEE6中改進CDI的幾個原因。
- JEE5確實支持資源注入,但是它仍然缺乏通用的依賴關(guān)系–它僅支持@ EJB,@ PersistenceContext,@ PersistenceUnit,@ Resources)–當然,除了Spring引入了用于管理bean生命周期的不同注釋外
- 非基于類型的注入(弱)–字符串名稱和XML注入確實很脆弱。 改進基于類型的注入通??梢詫崿F(xiàn)更好的工具。
術(shù)語
CDI –上下文和依賴注入
焊接
- JSR 299參考實現(xiàn)–參考實現(xiàn)是用于擴展JSR特定實現(xiàn)的SPI。
- 為Servlet容器提供擴展的CDI支持。
- 擴展編寫器的CDI增強功能。
- CDI和Java EE的Maven原型(我喜歡maven!)。
CDI主題:松散耦合和強類型
松散耦合只是意味著對象與使用或當前使用的對象在松散地獨立。 CDI引入了用于解耦的新功能,例如限定符 ,增強了攔截器 , 修飾器 ,消息生成器 , 使用者及其底層事件機制。 將深入探討有關(guān)CDI高級主題的每個示例。
強大的輸入 -只是意味著通過讓容器創(chuàng)建特定的名稱并將其映射到對象來嚴格聲明bean。 這樣就不需要對字符串進行基于字符串的命名,幾乎不需要鑄造,因為鑄造是由容器完成的(利用限定符)。
豆(什么?)
從技術(shù)上講,您擁有多種形式的bean:JSF Bean,EJB Bean,Spring,Seam,Guice CDI,實體Bean等,但是最終,bean只是具有特殊定義的POJO(由Managed Bean 1.0定義) – Java EE6中制定的規(guī)范。 這意味著任何POJO都可以是任何類型的bean,只要它符合規(guī)范標準即可–從而進一步簡化了聲明和開發(fā)過程。 容器負責管理POJO,并通過提供/引入常見的基本服務來增加對它的支持,例如:
- 生命周期管理(@ PostConstruct,@ PreDestory)
- 注入資源(@Resource)
- 攔截器(@ Interceptors,@ ArounInvoke)
考慮到這一點, EJB , REST和CDI bean呢?
- EJB bean服務–托管bean,具有公共服務(上述)并支持事務,安全性,線程安全性和持久性。
- REST bean服務–具有HTTP支持的托管bean
- CDI bean –具有生命周期的托管bean支持:
- 自動發(fā)現(xiàn)
確切地說,Manage Bean最終是針對特定用途而擴展的SPI。 EJB,Rest和實體Bean都是托管Bean,但是容器提供了其他服務。 因此,如果您使用@Stateless或@Stateful批注定義POJO,則容器會自動檢測到它是EJB bean,并且需要特定于容器的支持,例如事務,安全性,線程安全性,擴展等。
package mypackage; import javax.ejb.Stateless;@Stateless public class GreetingBean {public String greet(String name){return "Hello " + name;} }一個簡單的POJO類就用一個手指(實際上是敲入)就變成了一個Stateless bean,從而產(chǎn)生了一個@Stateless代碼。 與在先驗3.x上定義EJB的方式不同(這很痛苦)。
從此處下載示例(以上): 單擊我
自動Bean發(fā)現(xiàn)
CDI容器是負責如何發(fā)現(xiàn)Bean的容器,但是它是如何做到的?
最終,引入DI / CDI是為了簡化開發(fā)過程,統(tǒng)一技術(shù)和整體以產(chǎn)生更強大,可擴展的應用程序。 讓所有容器按照標記Bean的公共服務的方式工作,這使開發(fā)人員的工作更加輕松,而且比避免以前的框架導致的陷阱更容易。 SPI –實際上是改進的定義,它允許實際的JEE6框架可擴展,從而創(chuàng)造了更加動態(tài)的特性–業(yè)務應用程序架構(gòu)師現(xiàn)在可以設計自己的框架和約定。 為自己的規(guī)則放置更多特定于業(yè)務的設計或注釋,并提供企業(yè)應用程序始終需要的健壯性和靈活性。
下一主題: 基礎注射 –我不想將所有內(nèi)容放到一個帖子中,因此我將讓您先吸收它并檢查我創(chuàng)建的樣品。 從現(xiàn)在開始,我將詳細介紹DI和CDI的示例。
參考: DI / CDI – Alvin“ Jay” Reyes博客博客上的JCG合作伙伴 Alvin Reyes的基礎知識 。翻譯自: https://www.javacodegeeks.com/2013/08/di-cdi-basics.html
php cdi
總結(jié)
以上是生活随笔為你收集整理的php cdi_DI / CDI –基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑双肩包哪个牌子好(电脑双肩包哪个牌子
- 下一篇: 无服务器:SLAppForge Sigm