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

歡迎訪問 生活随笔!

生活随笔

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

java

java ee cdi_Java EE CDI依赖关系消歧示例

發布時間:2023/12/3 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java ee cdi_Java EE CDI依赖关系消歧示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java ee cdi

在本教程中,我們將向您展示如何避免CDI bean中的依賴關系消除歧義。 在CDI中,我們可以為應用程序中不同客戶端的接口的多個實現實現依賴項注入。 依賴性消除歧義的問題是客戶端如何在不同的實現中調用特定的實現,而不會發生任何錯誤。

為了了解在將bean注入應用程序時如何避免依賴消除歧義,我們將創建一個簡單的服務。 我們將創建服務的兩個實現,然后將這兩個實現注入到應用程序的servlet中。 我們將使用@Qualifiers ,如下所述。

我們首選的開發環境是Eclipse 。 我們正在使用Eclipse Juno(4.2)版本以及Maven Integration插件版本3.1.0。 您可以從Eclipse的這里從和Maven Eclipse插件這里 。 用于Eclipse的Maven插件的安裝不在本教程的討論范圍之內,因此不再討論。 Tomcat 7是使用的應用程序服務器。

讓我們開始,

1.創建一個新的Maven項目

轉到文件->項目-> Maven-> Maven項目。

在向導的“選擇項目名稱和位置”頁面中,確保未選中 “創建簡單項目(跳過原型選擇)”選項,單擊“下一步”以繼續使用默認值。

在這里,必須添加用于創建Web應用程序的Maven原型。 單擊“添加原型”并添加原型。 將“ Archetype組ID”變量設置為"org.apache.maven.archetypes" ,將“ Archetype構件ID”變量設置為"maven-archetype-webapp" ,將“ Archetype版本”設置為"1.0" 。 點擊“確定”繼續。

在向導的“輸入工件ID”頁面中,您可以定義項目的名稱和主程序包。 將“組ID”變量設置為"com.javacodegeeks.snippets.enterprise" ,將“工件ID”變量設置為"cdibeans" 。 上述選擇組成主體工程包作為"com.javacodegeeks.snippets.enterprise.cdibeans"和項目名稱為"cdibeans" 。 將“ Package”變量設置為"war" ,以便創建一個war文件以部署到tomcat服務器。 點擊“完成”退出向導并創建您的項目。

Maven項目結構如下所示:

  • 它由以下文件夾組成:
  • / src / main / java文件夾,其中包含應用程序動態內容的源文件,
  • / src / test / java文件夾包含用于單元測試的所有源文件,
  • / src / main / resources文件夾包含配置文件,
  • / target文件夾包含已編譯和打包的可交付成果,
  • / src / main / resources / webapp / WEB-INF文件夾包含Web應用程序的部署描述符,
  • pom.xml是項目對象模型(POM)文件。 包含所有項目相關配置的單個文件。

2.添加所有必要的依賴項

通過在POM編輯器的“ Pom.xml”頁面上對其進行編輯,可以在Maven的pom.xml文件中添加依賴項,如下所示:

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.javacodegeeks.snippets.enterprise.cdi</groupId><artifactId>cdibeans</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>cdibeans Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>org.jboss.weld.servlet</groupId><artifactId>weld-servlet</artifactId><version>1.1.10.Final</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency><dependency><groupId>org.glassfish</groupId><artifactId>javax.faces</artifactId><version>2.1.7</version></dependency></dependencies><build><finalName>cdibeans</finalName></build> </project>

如您所見,Maven以聲明方式管理庫依賴關系。 創建本地存儲庫(默認情況下,位于{user_home} /。m2文件夾下),所有必需的庫都從公共存儲庫下載并放置在該庫中。 此外,庫內的依賴關系會自動解決和處理。

3.創建一個簡單的服務

我們利用一個簡單的服務為使用它的應用程序創建問候消息。 GreetingCard.java類是帶有產生問候消息的方法的接口。

GreetingCard.java

package com.javacodegeeks.snippets.enterprise.cdibeans;public interface GreetingCard {void sayHello(); }

我們創建服務的兩個實現。 每個實現都會產生不同的消息,如下所示:

GreetingCardImpl.java

package com.javacodegeeks.snippets.enterprise.cdibeans.impl;import com.javacodegeeks.snippets.enterprise.cdibeans.GreetingCard;public class GreetingCardImpl implements GreetingCard {public void sayHello() {System.out.println("Hello!!!");}}

AnotherGreetingCardImpl.java

package com.javacodegeeks.snippets.enterprise.cdibeans.impl;import com.javacodegeeks.snippets.enterprise.cdibeans.GreetingCard;public class AnotherGreetingCardImpl implements GreetingCard {public void sayHello() {System.out.println("Have a nice day!!!");}}

4.服務的使用

為了將服務注入另一個bean,我們可以使用@Qualifier 。 CDI允許我們創建自己的Java批注,然后在應用程序的注入點中使用它,以根據Bean的GreetingType獲得正確的GreetingCard實現。

Greetings.java

package com.javacodegeeks.snippets.enterprise.cdibeans;import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; import java.lang.annotation.Target;import javax.inject.Qualifier;@Qualifier @Retention(RUNTIME) @Target({ FIELD, TYPE, METHOD }) public @interface Greetings {GreetingType value();}

GreetingType.java是一個枚舉,如下所示:

GreetingType.java

package com.javacodegeeks.snippets.enterprise.cdibeans;public enum GreetingType {HELLO, HI; }

現在,服務實現使用注釋,如下所示:

GreetingCardImpl.java

package com.javacodegeeks.snippets.enterprise.cdibeans.impl;import com.javacodegeeks.snippets.enterprise.cdibeans.GreetingCard;@Greetings(GreetingType.HELLO) public class GreetingCardImpl implements GreetingCard {public void sayHello() {System.out.println("Hello!!!");}}

AnotherGreetingCardImpl.java

package com.javacodegeeks.snippets.enterprise.cdibeans.impl;import com.javacodegeeks.snippets.enterprise.cdibeans.GreetingCard;@Greetings(GreetingType.HI) public class AnotherGreetingCardImpl implements GreetingCard {public void sayHello() {System.out.println("Have a nice day!!!");}}

5.將服務注入到servlet中

我們創建一個簡單的servlet,并使用CDI提供的@Inject注釋注入服務的兩種實現,如下所示:

GreetingServlet.java

package com.javacodegeeks.snippets.enterprise.cdibeans.servlet;import java.io.IOException; import java.io.PrintWriter;import javax.inject.Inject; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import com.javacodegeeks.snippets.enterprise.cdibeans.GreetingCard; import com.javacodegeeks.snippets.enterprise.cdibeans.GreetingType; import com.javacodegeeks.snippets.enterprise.cdibeans.Greetings;@WebServlet(name = "greetingServlet", urlPatterns = {"/sayHello"}) public class GreetingServlet extends HttpServlet {private static final long serialVersionUID = 2280890757609124481L;@Inject@Greetings(GreetingType.HELLO)private GreetingCard greetingCard;@Inject@Greetings(GreetingType.HI)private GreetingCard anotherGreetingCard;public void init() throws ServletException {}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<h1>" + greetingCard.sayHello() + "</h1>");out.println("<h1>" + anotherGreetingCard.sayHello() + "</h1>");}public void destroy(){}}

要運行該示例,我們必須使用Maven構建項目,然后將產生的war文件放置在tomcat的webbaps文件夾中。 然后,我們可以繼續:

http://localhost/8080/cdibeans/sayHello

結果是如下所示:

請注意,當使用Producer方法注入CDI bean時,依賴關系也可能會消除歧義,如Java EE CDI Producer方法教程中所示 。

這是Java EE CDI依賴關系消除歧義的教程。 下載本教程的源代碼: CDIDependencyDisambiguationExample.zip

翻譯自: https://www.javacodegeeks.com/2013/06/java-ee-cdi-dependency-disambiguation-example.html

java ee cdi

總結

以上是生活随笔為你收集整理的java ee cdi_Java EE CDI依赖关系消歧示例的全部內容,希望文章能夠幫你解決所遇到的問題。

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