(翻譯)JavaEE6規范 CDI教程第五部分

          原文鏈接: http://code.google.com/p/jee6-cdi/wiki/DependencyInjectionAnIntroductoryTutorial

          本部分講述使用多個@Qualifiers來進一步區分注入類型

          在同一個注入點上使用多個@Qualifiers來進一步區分

          你可以使用多個限定注解來進一步區分你的注入目標。

          我們定義限定注解SuperFastStandardFrameRelaySwitchingFlubber來演示這個用法。那樣的話我們就有第二個傳輸器StandardFrameRelaySwitchingFlubber和SuperFast,我們要注入的傳輸器不僅有StandardFrameRelaySwitchingFlubber,還有SuperFast

          首先我們來定義限定注解,如下:

          // 定義新的SuperFast限定注解 package org.cdi.advocacy;  
          ...
          @Qualifier
          @Retention(RUNTIME)
          @Target({TYPE, METHOD, FIELD, PARAMETER})
          public @interface SuperFast {
          }
          // 定義另一個新的StandardFrameRelaySwitchingFlubber限定注解 
          package org.cdi.advocacy;
          ...
          @Qualifier @Retention(RUNTIME)
          @Target({TYPE, METHOD, FIELD, PARAMETER})
          public @interface StandardFrameRelaySwitchingFlubber {
          }

          OK,下面的代碼是給SuperFastAtmTransport同時使用@SuperFast@StandardFrameRelaySwitchingFlubber限定注解。

          // SuperFastAtmTransport使用兩個限定注解 
          package org.cdi.advocacy;

          @SuperFast @StandardFrameRelaySwitchingFlubber
          public class SuperFastAtmTransport implements ATMTransport {
          public void communicateWithBank(byte[] datapacket) {
          System.out.println("communicating with bank via the Super Fast transport " );
          }
          }

          Ok,我們也給StandardAtmTransport加上StandardFrameRelaySwitchingFlubber限定注解。

          // StandardAtmTransport使用一個限定注解 
          package org.cdi.advocacy;

          @StandardFrameRelaySwitchingFlubber
          @Default
          public class StandardAtmTransport implements ATMTransport {
          public void communicateWithBank(byte[] datapacket) {
          System.out.println("communicating with bank via Standard transport");
          }
          }

          接下來,我希望我的自動柜員機使用SuperFast傳輸并帶有StandardFrameRelaySwitchingFlubber,我必須在注入點同時使用它們,如下:

          // AutomatedTellerMachineImpl更改為使用兩個限定注解 
          public class AutomatedTellerMachineImpl implements AutomatedTellerMachine {
          @Inject @SuperFast @StandardFrameRelaySwitchingFlubber
          private ATMTransport transport;
          ... deposit called
          communicating with bank via the Super Fast transport

          練習:創建一個具有@SuperFast, @StandardFrameRelaySwitchingFlubber 和 @Alternative的傳輸器。然后使用beans.xml激活SuperFast, StandardFrameRelaySwitchingFlubber, Alternative支持。通過CDI Group郵件列表發給我你的解決方案。第一發送的將會張貼在CDI墻壁上。

          閱讀者練習:更改注入點限定,只使用StandardAtmTransport。通過CDI Group郵件列表發給我你的解決方案。第一發送的將會張貼在CDI:墻壁上。

          待續..

          2011-07-12

          posted on 2011-07-12 10:38 kuuyee 閱讀(1874) 評論(0)  編輯  收藏 所屬分類: CDIJEE

          導航

          <2011年7月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統計

          隨筆分類(139)

          Linux內核

          搜索

          •  

          積分與排名

          • 積分 - 320260
          • 排名 - 178

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 乐清市| 饶阳县| 栾城县| 纳雍县| 潞西市| 菏泽市| 太保市| 烟台市| 湖北省| 汪清县| 贵溪市| 大埔县| 寻甸| 鄂尔多斯市| 新巴尔虎右旗| 长顺县| 固阳县| 嘉荫县| 积石山| 澳门| 呼图壁县| 金乡县| 苍南县| 宽城| 墨脱县| 紫金县| 尚志市| 绥阳县| 梅河口市| 阿合奇县| 安康市| 富阳市| 惠来县| 滦平县| 亳州市| 万载县| 炉霍县| 手机| 彩票| 伊金霍洛旗| 景德镇市|