JavaEE6规范CDI教程第五部分
1. 在同一个注入点上使用多个@Qualifiers来进一步区分
你可以使用多个限定注解来进一步区分你的注入目标。
我们定义限定注解SuperFast和StandardFrameRelaySwitchingFlubber来演示这个用法。那样的话我们就有第二个传输器StandardFrameRelaySwitchingFlubber和SuperFast,我们要注入的传输器不仅有StandardFrameRelaySwitchingFlubber,还有SuperFast。
首先我们来定义限定注解,如下:
例 1. 定义新的SuperFast限定注解
package org.cdi.advocacy;...
@Qualifier @Retention(RUNTIME) @Target({TYPE, METHOD, FIELD, PARAMETER})
public @inte易做图ce SuperFast {}
例 2. 定义另一个新的StandardFrameRelaySwitchingFlubber限定注解
package org.cdi.advocacy;...
@Qualifier @Retention(RUNTIME) @Target({TYPE, METHOD, FIELD, PARAMETER})
public @inte易做图ce StandardFrameRelaySwitchingFlubber {}
OK,下面的代码是给SuperFastAtmTransport同时使用@SuperFast和@StandardFrameRelaySwitchingFlubber限定注解。
例 3. 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限定注解。
例 4. 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,我必须在注入点同时使用它们,如下:
例 5. 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墙壁上。
补充:软件开发 , Java ,