JavaEE6规范CDI教程第五部分

2014-11-24 01:22:35 · 作者: · 浏览: 0

1. 在 同 一 个 注 入 点 上 使 用 多 个 @Qualifiers来 进 一 步 区 分
你 可 以 使 用 多 个 限 定 注 解 来 进 一 步 区 分 你 的 注 入 目 标 。
我 们 定 义 限 定 注 解 SuperFast和 StandardFrameRelaySwitchingFlubber来 演 示 这 个 用 法 。 那 样 的 话 我 们 就 有 第 二 个 传 输 器 StandardFrameRelaySwitchingFlubber和 SuperFast,我 们 要 注 入 的 传 输 器 不 仅 有 StandardFrameRelaySwitchingFlubber,还 有 SuperFast。
首 先 我 们 来 定 义 限 定 注 解 ,如 下 :
例 1. 定 义 新 的 SuperFast限 定 注 解
package org.cdi.advocacy;

...

@Qualifier @Retention(RUNTIME) @Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface SuperFast {

}


例 2. 定 义 另 一 个 新 的 StandardFrameRelaySwitchingFlubber限 定 注 解
package org.cdi.advocacy;

...

@Qualifier @Retention(RUNTIME) @Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface 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墙 壁 上 。