JavaEE6规范CDI教程第一部分

2014-11-24 01:08:52 · 作者: · 浏览: 0

图 片 无 法 显 示

1. 引 言
此 教 程 讲 述 DI(依 赖 注 入 ),并 且 涵 盖 了 CDI(上 下 文 依 赖 注 入 )的 一 些 特 性 ,比 如 类 型 安 全 注 解 配 置 、 替 换 选 择 等 内 容 。
CDI是 依 赖 注 入 (DI)和 拦 截 (AOP)的 Java标 准 规 范 。 DI和 AOP有 着 很 高 的 知 名 度 ,Java需 要 处 理 DI和 AOP以 便 在 此 之 上 构 建 其 它 的 标 准 。 DI和 AOP是 很 多 Java框 架 的 基 础 。
CDI是 JavaEE 6的 基 础 。 它 很 快 就 得 到 了 Cauchos Resin、 IBMs WebSphere、 Oracles Glassfish、 Red Hats JBoss和 众 多 应 用 服 务 器 的 支 持 。 CDI与 Spring和 Guice框 架 非 常 相 似 ,就 像 JPA很 像 ORM。 CDI简 化 了 对 于 DI和 AOP的 API。 如 果 你 使 用 过 Spring或 者 Guice,你 会 发 现 CDI更 容 易 学 习 和 使 用 。 如 果 你 是 依 赖 注 入 (DI)的 新 手 ,那 么 CDI能 让 你 迅 速 理 解 DI。 CDI更 容 易 学 习 和 使 用 。
CDI能 够 独 立 使 用 也 能 嵌 入 的 任 何 应 用 中 。
这 个 教 程 在 发 布 三 年 之 久 的 Spring 2.5 DI 教 程 (使 用 Spring “ new” DI 注 解 )之 后 出 现 并 不 奇 怪 。 它 将 有 趣 的 对 比 三 年 前 缩 写 的 Spring DI注 解 。
2. 本 教 程 设 计 目 标
本 教 程 的 目 标 是 描 述 和 解 读 不 包 含 复 杂 的 EJB3.1和 JSF的 DI和 CDI。
CDI的 优 势 是 能 够 在 EJB和 JSF之 外 。 本 教 程 只 关 注 CDI。 再 次 声 明 在 本 教 程 中 没 有 JSF2和 EJB3.1的 内 容 。 很 多 文 章 和 教 程 都 涵 盖 如 何 使 用 CDI(JEE6规 范 )。 本 教 程 并 不 是 ,这 里 只 是 CDI。
本 教 程 有 完 整 的 代 码 示 例 ,你 可 以 下 载 试 用 。
我 们 将 放 缓 速 度 ,逐 步 的 从 基 础 开 始 。 一 旦 你 理 解 了 基 本 原 理 ,我 们 会 适 当 的 加 快 脚 步 。

所 有 的 示 例 代 码 都 以 确 保 能 够 运 行 。 我 们 不 会 键 入 临 时 代 码 ,如 果 代 码 不 能 运 行 ,那 它 就 不 属 于 本 教 。
示 例 代 码 都 有 清 晰 的 标 题 ,所 以 你 可 以 把 教 程 看 做 一 个 菜 单 ,将 来 你 如 果 想 使 用 CDI DI的 某 些 特 性 ,可 以 方 便 的 在 菜 单 目 录 中 查 找 示 例 。
装 饰 器 、 扩 展 、 拦 截 器 、 范 围 都 不 在 本 教 程 的 范 围 之 内 。
如 果 这 个 教 程 通 过 google讨 论 组 收 到 足 够 的 反 馈 和 评 论 ,我 将 加 入 CDI AOP(装 饰 器 和 拦 截 器 )综 合 教 程 还 有 扩 展 。
更 多 的 建 议 和 反 馈 会 鼓 舞 我 做 的 更 好 。
3. 依 赖 注 入
依 赖 注 入 (DI)是 为 软 件 组 件 提 供 扩 展 依 赖 的 过 程 。 DI能 够 让 你 的 代 码 架 构 很 简 洁 。
它 帮 助 你 用 测 试 驱 动 开 发 的 方 式 设 计 接 口 ,提 供 统 一 的 方 式 注 入 依 赖 。 例 如 ,一 个 数 据 访 问 对 象 (DAO)可 能 依 赖 一 个 数 据 库 连 接 。
取 而 代 之 ,使 用 JNDI查 找 数 据 库 连 接 ,你 不 需 要 注 入 它 。
考 虑 到 JNDI是 彻 底 的 翻 查 ,DI框 架 取 代 对 象 查 找 其 它 准 备 好 的 对 象 (依 赖 的 ),一 个 DI容 器 能 注 入 这 些 依 赖 的 对 象 。 这 被 成 为 “ 好 莱 坞 原 则 ” ,“ 不 要 给 我 打 电 话 (查 找 对 象 ),我 会 打 给 你 (注 入 对 象 )” 。
如 果 你 接 触 过 CRC卡 ,你 能 想 象 出 一 个 依 赖 就 像 一 个 合 作 者 。 一 个 合 作 者 是 一 个 对 象 ,另 一 个 对 象 需 要R