上下文和依赖性注入 (CDI)
了解用于 Java™ EE 平台的上下文和依赖性注入 1.2 (CDI 1.2),它是基于 JBoss Weld 的 JSR 346 实现。
如果该模块中存在 beans.xml 文件,或者 JSR 346 规范中定义了
bean 定义注释,那么将在应用程序中激活 CDI。可以在 Web 归档 (WAR) 的 WEB-INF 目录或其他类型归档的 META-INF 目录中找到 beans.xml 文件。激活后,容器将提供如下服务:
- 上下文管理
- 类型安全依赖关系注入:将根据需要实例化和注入CDI 管理的 bean。
- 修饰符,实现一个或多个 bean 接口并可以包含业务逻辑。缺省情况下禁用修饰符。针对每个 bean,您可以具有多个修饰符,且 beans.xml 文件定义顺序。使用 beans.xml 或 @Priority 来启用修饰符。
- 拦截器绑定:在 beans.xml 文件中手动启用或使用 @Priority 全局启用的拦截器是通过使用拦截器绑定类型绑定的。
- 事件模型
- 集成至使用 Expression Language (EL) 的 JavaServer Faces (JSF) 和 JavaServer Pages (JSP) 文件
- 支持注入和使用拦截器的 JavaEE 组件类
将针对 JSR 299 和 JSR 330 的与规范相关的 API 类以及基于 Apache OpenWebBeans 的 IBM® 修改的实现类打包到应用程序服务器运行时环境中。
尽管产品 CDI 实现基于 Apache OpenWebBeans,但对 OpenWebBeans 添加了以下更改和新增项以支持与服务器运行时集成:
- 与支持可注入组件的 WebSphere® Application Server(传统) 中的其他 Java 平台企业修订版 (Java EE) 容器集成。
- 使用 WebSphere Application Server(传统) 字代码扫描程序的 ScannerService 实现。
- 直接使用产品 Enterprise JavaBeans (EJB) 元数据来确定 EJB 类型。
- 针对 CDI 应用程序自动注册 servlet 侦听器、过滤器和拦截器,从而不必由每个应用程序再行添加。
- 许多 OpenWebBeans 服务编程接口 (SPI) 的特定于产品的实现,例如,ResourceInjectionService、TransactionService 和故障转移服务。
要点: 容器管理的事务和安全性不是由 CDI 提供。
