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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java EE CDI依赖注入(@Inject)教程

發布時間:2023/12/3 java 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java EE CDI依赖注入(@Inject)教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在本教程中,我們將向您展示如何在CDI管理的Bean中實現依賴注入。 特別是,我們將利用CDI API提供的@Inject批注將CDI bean注入另一個bean。 這樣,可以在應用程序(例如JavaServer Faces應用程序)中使用bean。

CDI提供了幾種將Bean注入應用程序的方法。 我們可以使用字段依賴注入,構造函數依賴注入或通過setter方法的依賴注入來注入CDI bean。 我們還可以注入生產者方法的參數,但這超出了本教程的范圍。 讓我們檢查一下CDI提供的所有注入方式:

1.字段依賴注入

注入CDI bean的最簡單方法是在要注入的屬性中添加@Inject批注。 讓我們看下面的例子。 GreetingBean有一個@Inject注釋字段,它是helloBean 。 這樣,另一個bean HelloBean被注入GreetingBean 。

package com.javacodegeeks.snippets.enterprise.cdibeans;import javax.inject.Inject;public class GreetingBean {@Inject private HelloBean helloBean;}

2.構造函數依賴注入

初始化CDI bean時,容器將使用其默認構造函數。 如果有另一個帶有@Inject注釋的構造函數,則容器將自動使用該構造函數,這樣,構造函數中傳遞的參數將被注入Bean中。 這里要注意的是,我們只能有一個構造函數注入點。 如果我們創建另一個@Inject注釋的構造函數,則容器的行為是不可預測的。

在GreetingBean下方的代碼段中,有一個構造函數,該構造函數帶有@Inject注釋和一個參數,即另一個bean HelloBean 。 以這種方式實現注射。

package com.javacodegeeks.snippets.enterprise.cdibeans;import javax.inject.Inject;public class GreetingBean {private final HelloBean helloBean;@Injectpublic GreetingBean(HelloBean helloBean){this.helloBean = helloBean;}}

3.通過setter方法進行依賴注入

在下面的示例中,使用@Inject注釋對setHelloBean(HelloBean helloBean)方法進行注釋。 因此,當GreetingBean由容器初始化時,將調用該方法,因為該方法帶有@Inject注釋,并且將注入HelloBean 。

package com.javacodegeeks.snippets.enterprise.cdibeans;import javax.inject.Inject;public class GreetingBean {private HelloBean helloBean;@Injectpublic void setHelloBean(HelloBean helloBean) {this.helloBean = helloBean;} }

4.使用@Any限定詞

當我們對一個接口有多種實現,并且希望將它們全部注入到另一個bean中時,可以使用@Any限定符。 使用此注釋,容器將注入指定接口的所有實現。 它與CDI API提供的javax.enterprise.inject.Instance接口一起使用,如下面的代碼片段所示:

package com.javacodegeeks.snippets.enterprise.cdibeans;import javax.enterprise.inject.Any; import javax.enterprise.inject.Instance; import javax.inject.Inject;public class GreetingBean {@Injectpublic void getAllBeanImplementations(@Any Instance<HelloBean> beans) {for (HelloBean helloBean : beans) {System.out.println(helloBean.getClass().getCanonicalName());}} }

在這里我們必須注意,如果有多個依賴關系滿足一個注入點,并且我們將不使用@Any限定符,而是嘗試注入一個,那么容器將失敗。

5.使用代理進行注射

為了將托管bean注入到另一個bean中(除@Dependent注釋的bean之外),CDI容器不會傳遞對注入的bean本身的引用,而是傳遞給代理的引用。 代理透明地處理對注入的bean的所有調用。 例如,當我們將SessionScoped bean注入ApplicationScoped bean并且許多客戶端訪問ApplicationScopedBean ,代理將被用來處理對注入的bean的調用。 每個代理都可以將調用重定向到正確的bean。

最后,請注意,通過擴展Bean類并覆蓋所有非自變方法來創建CDI代理。 原始類型不能被注入。 Bean類必須具有非私有的默認構造函數,并且不能為final,也不能具有final方法。
這是使用@Inject批注的CDI托管Bean中的依賴注入的教程。

翻譯自: https://www.javacodegeeks.com/2013/05/java-ee-cdi-dependency-injection-inject-tutorial.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Java EE CDI依赖注入(@Inject)教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。