日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php cdi_DI / CDI –基础

發(fā)布時(shí)間:2023/12/3 php 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php cdi_DI / CDI –基础 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

php cdi

簡(jiǎn)介(DI / CDI基礎(chǔ))

首先,我認(rèn)為對(duì)此會(huì)有一些困惑,但事實(shí)是,它們是相同的–不同之處在于用法及其用途。

DI(依賴(lài)項(xiàng)注入)是一個(gè)通用術(shù)語(yǔ)–此功能基本上是在任何應(yīng)用程序上進(jìn)行Bean發(fā)現(xiàn)和Bean連接過(guò)程的功能。 它不僅可以在應(yīng)用程序中使用它,還可以在單??元測(cè)試和模擬中使用它。 當(dāng)然,這里有很多DI框架,包括:Guice,Seam,Spring(Seam和Spring擴(kuò)展了DI方案,并制定了自己的框架),EJB 3.x和CDI本身。

另一方面,CDI結(jié)合了所有這些技術(shù),并向組件引入了生命周期–這使得DI技術(shù)得以統(tǒng)一,從而使新功能的開(kāi)發(fā)變得直截了當(dāng)且可行。 您可以將Seams生命周期映射與以JPA作為其持久層的Spring MVC結(jié)合在一起-這些技術(shù)都是單獨(dú)創(chuàng)建的,但都與CDI結(jié)合使用,應(yīng)用程序開(kāi)發(fā)人員可以將它們結(jié)合在一起以創(chuàng)建和開(kāi)發(fā)JEE應(yīng)用程序。

我將需要分解主題,因?yàn)槲铱隙〞?huì)在這里用單詞和字母讓每個(gè)人感到厭煩:

  • DI / CDI基礎(chǔ)
  • 基本注射
  • 資格賽,范圍
  • DI / CDI高級(jí)
  • 我將分別為每個(gè)帖子創(chuàng)建帖子!

    讓我們開(kāi)始!

    SPI(服務(wù)編程接口)

    它還具有所謂的SPI-顯然是與API一起提供的功能集,但完全具有不同的用途。

    • API是您為實(shí)現(xiàn)目標(biāo)而調(diào)用和使用的類(lèi)/接口/方法/…的描述。
    • SPI是您為實(shí)現(xiàn)目標(biāo)而擴(kuò)展和實(shí)現(xiàn)的類(lèi)/接口/方法/…的描述。

    使用SPI,您實(shí)際上可以擴(kuò)展JEE6以創(chuàng)建自己的不同框架,從而展示可移植性和可擴(kuò)展性。 ( 但我稍后會(huì)介紹 )。

    為什么選擇CEE for JEE6?

    CDI已經(jīng)出現(xiàn)在JEE5(J2EE)中,并取得了巨大的成功。 它的方法使很多新開(kāi)發(fā)受益,最終簡(jiǎn)化了整個(gè)開(kāi)發(fā)過(guò)程。 在JEE6中改進(jìn)CDI的幾個(gè)原因。

    • JEE5確實(shí)支持資源注入,但是它仍然缺乏通用的依賴(lài)關(guān)系–它僅支持@ EJB,@ PersistenceContext,@ PersistenceUnit,@ Resources)–當(dāng)然,除了Spring引入了用于管理bean生命周期的不同注釋外
    • 非基于類(lèi)型的注入(弱)–字符串名稱(chēng)和XML注入確實(shí)很脆弱。 改進(jìn)基于類(lèi)型的注入通??梢詫?shí)現(xiàn)更好的工具。

    術(shù)語(yǔ)

    CDI –上下文和依賴(lài)注入

    焊接

    • JSR 299參考實(shí)現(xiàn)–參考實(shí)現(xiàn)是用于擴(kuò)展JSR特定實(shí)現(xiàn)的SPI。
    • 為Servlet容器提供擴(kuò)展的CDI支持。
    • 擴(kuò)展編寫(xiě)器的CDI增強(qiáng)功能。
    • CDI和Java EE的Maven原型(我喜歡maven!)。

    CDI主題:松散耦合和強(qiáng)類(lèi)型

    松散耦合只是意味著對(duì)象與使用或當(dāng)前使用的對(duì)象在松散地獨(dú)立。 CDI引入了用于解耦的新功能,例如限定符 ,增強(qiáng)了攔截器修飾器 ,消息生成器使用者及其底層事件機(jī)制。 將深入探討有關(guān)CDI高級(jí)主題的每個(gè)示例。

    強(qiáng)大的輸入 -只是意味著通過(guò)讓容器創(chuàng)建特定的名稱(chēng)并將其映射到對(duì)象來(lái)嚴(yán)格聲明bean。 這樣就不需要對(duì)字符串進(jìn)行基于字符串的命名,幾乎不需要鑄造,因?yàn)殍T造是由容器完成的(利用限定符)。

    豆(什么?)

    從技術(shù)上講,您擁有多種形式的bean:JSF Bean,EJB Bean,Spring,Seam,Guice CDI,實(shí)體Bean等,但是最終,bean只是具有特殊定義的POJO(由Managed Bean 1.0定義) – Java EE6中制定的規(guī)范。 這意味著任何POJO都可以是任何類(lèi)型的bean,只要它符合規(guī)范標(biāo)準(zhǔn)即可–從而進(jìn)一步簡(jiǎn)化了聲明和開(kāi)發(fā)過(guò)程。 容器負(fù)責(zé)管理POJO,并通過(guò)提供/引入常見(jiàn)的基本服務(wù)來(lái)增加對(duì)它的支持,例如:

    • 生命周期管理(@ PostConstruct,@ PreDestory)
    • 注入資源(@Resource)
    • 攔截器(@ Interceptors,@ ArounInvoke)
    @javax.annotation.ManagedBean public class MyPojo {@Resource // Resource injection private Datasource ds;@PostConstruct // Life-cycle private void init() {.... } @Interceptors(LoggingInterceptor.class)public void myMethod() {...} }

    考慮到這一點(diǎn), EJBRESTCDI bean呢?

    • EJB bean服務(wù)–托管bean,具有公共服務(wù)(上述)并支持事務(wù),安全性,線程安全性和持久性。
    • REST bean服務(wù)–具有HTTP支持的托管bean
    • CDI bean –具有生命周期的托管bean支持:
      • 自動(dòng)發(fā)現(xiàn)

    確切地說(shuō),Manage Bean最終是針對(duì)特定用途而擴(kuò)展的SPI。 EJB,Rest和實(shí)體Bean都是托管Bean,但是容器提供了其他服務(wù)。 因此,如果您使用@Stateless或@Stateful批注定義POJO,則容器會(huì)自動(dòng)檢測(cè)到它是EJB bean,并且需要特定于容器的支持,例如事務(wù),安全性,線程安全性,擴(kuò)展等。

    package mypackage; import javax.ejb.Stateless;@Stateless public class GreetingBean {public String greet(String name){return "Hello " + name;} }

    一個(gè)簡(jiǎn)單的POJO類(lèi)就用一個(gè)手指(實(shí)際上是敲入)就變成了一個(gè)Stateless bean,從而產(chǎn)生了一個(gè)@Stateless代碼。 與在先驗(yàn)3.x上定義EJB的方式不同(這很痛苦)。

    從此處下載示例(以上): 單擊我

    自動(dòng)Bean發(fā)現(xiàn)

    CDI容器是負(fù)責(zé)如何發(fā)現(xiàn)Bean的容器,但是它是如何做到的?

  • 它首先掃描包含應(yīng)用程序和容器檔案的類(lèi)路徑。
  • 它嘗試掃描類(lèi)路徑,以查看要進(jìn)行發(fā)現(xiàn)的POJO標(biāo)記-即Managed Bean。 您可以認(rèn)為它放在一個(gè)池中,并且當(dāng)另一個(gè)Managed Bean通過(guò)注入對(duì)其進(jìn)行調(diào)用時(shí)可以隨時(shí)使用(有關(guān)下一個(gè)博客主題的更多信息)
  • 然后,它檢測(cè)到bean.xml(或任何上下文xml文件定義)的存在。
  • 對(duì)于Spring愛(ài)好者來(lái)說(shuō),這很像一個(gè)applicationContext.xml(至少是約定,但是很松散)–您將XML傳遞到contextConfiguration偵聽(tīng)器(直通參數(shù))上,Spring CDI Container將自動(dòng)在其中標(biāo)記對(duì)象(beans)以便發(fā)現(xiàn)–當(dāng)然,您需要定義掃描機(jī)制(組件掃描)。
  • 最終,引入DI / CDI是為了簡(jiǎn)化開(kāi)發(fā)過(guò)程,統(tǒng)一技術(shù)和整體以產(chǎn)生更強(qiáng)大,可擴(kuò)展的應(yīng)用程序。 讓所有容器按照標(biāo)記Bean的公共服務(wù)的方式工作,這使開(kāi)發(fā)人員的工作更加輕松,而且比避免以前的框架導(dǎo)致的陷阱更容易。 SPI –實(shí)際上是改進(jìn)的定義,它允許實(shí)際的JEE6框架可擴(kuò)展,從而創(chuàng)造了更加動(dòng)態(tài)的特性–業(yè)務(wù)應(yīng)用程序架構(gòu)師現(xiàn)在可以設(shè)計(jì)自己的框架和約定。 為自己的規(guī)則放置更多特定于業(yè)務(wù)的設(shè)計(jì)或注釋,并提供企業(yè)應(yīng)用程序始終需要的健壯性和靈活性。

    下一主題: 基礎(chǔ)注射 –我不想將所有內(nèi)容放到一個(gè)帖子中,因此我將讓您先吸收它并檢查我創(chuàng)建的樣品。 從現(xiàn)在開(kāi)始,我將詳細(xì)介紹DI和CDI的示例。

    參考: DI / CDI – Alvin“ Jay” Reyes博客博客上的JCG合作伙伴 Alvin Reyes的基礎(chǔ)知識(shí) 。

    翻譯自: https://www.javacodegeeks.com/2013/08/di-cdi-basics.html

    php cdi

    總結(jié)

    以上是生活随笔為你收集整理的php cdi_DI / CDI –基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。