(翻譯)JavaEE6規(guī)范 CDI教程第五部分
原文鏈接: http://code.google.com/p/jee6-cdi/wiki/DependencyInjectionAnIntroductoryTutorial
本部分講述使用多個(gè)@Qualifiers來(lái)進(jìn)一步區(qū)分注入類型
在同一個(gè)注入點(diǎn)上使用多個(gè)@Qualifiers來(lái)進(jìn)一步區(qū)分
你可以使用多個(gè)限定注解來(lái)進(jìn)一步區(qū)分你的注入目標(biāo)。
我們定義限定注解SuperFast和StandardFrameRelaySwitchingFlubber來(lái)演示這個(gè)用法。那樣的話我們就有第二個(gè)傳輸器StandardFrameRelaySwitchingFlubber和SuperFast,我們要注入的傳輸器不僅有StandardFrameRelaySwitchingFlubber,還有SuperFast。
首先我們來(lái)定義限定注解,如下:
// 定義新的SuperFast限定注解 package org.cdi.advocacy;
...
@Qualifier
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface SuperFast {
}
// 定義另一個(gè)新的StandardFrameRelaySwitchingFlubber限定注解
package org.cdi.advocacy;
...
@Qualifier @Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface StandardFrameRelaySwitchingFlubber {
}
OK,下面的代碼是給SuperFastAtmTransport同時(shí)使用@SuperFast和@StandardFrameRelaySwitchingFlubber限定注解。
// SuperFastAtmTransport使用兩個(gè)限定注解
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使用一個(gè)限定注解
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");
}
}
接下來(lái),我希望我的自動(dòng)柜員機(jī)使用SuperFast傳輸并帶有StandardFrameRelaySwitchingFlubber,我必須在注入點(diǎn)同時(shí)使用它們,如下:
// AutomatedTellerMachineImpl更改為使用兩個(gè)限定注解
public class AutomatedTellerMachineImpl implements AutomatedTellerMachine {
@Inject @SuperFast @StandardFrameRelaySwitchingFlubber
private ATMTransport transport;
... deposit called
communicating with bank via the Super Fast transport
練習(xí):創(chuàng)建一個(gè)具有@SuperFast, @StandardFrameRelaySwitchingFlubber 和 @Alternative的傳輸器。然后使用beans.xml激活SuperFast, StandardFrameRelaySwitchingFlubber, Alternative支持。通過(guò)CDI Group郵件列表發(fā)給我你的解決方案。第一發(fā)送的將會(huì)張貼在CDI墻壁上。
閱讀者練習(xí):更改注入點(diǎn)限定,只使用StandardAtmTransport。通過(guò)CDI Group郵件列表發(fā)給我你的解決方案。第一發(fā)送的將會(huì)張貼在CDI:墻壁上。
待續(xù)..
posted on 2011-07-12 10:38 kuuyee 閱讀(1875) 評(píng)論(0) 編輯 收藏 所屬分類: CDI 、JEE