CDI是一组服务,它们一起使用,使开发人员可以轻松地在Web应用程序中使用企业bean和JavaServer Faces技术。CDI设计用于有状态对象,还有许多更广泛的用途,允许开发人员以松散耦合但类型安全的方式集成各种组件的灵活性

CDI 2.0由JSR 365指定.CDI使用的相关规范包括以下内容:

  • JSR 330,Java的依赖注入

  • Managed Beans规范,Java EE平台规范的一个分支(JSR 366)

CDI提供的最基本服务如下。

  • 上下文:此服务使您能够将有状态组件的生命周期和交互绑定到定义良好但可扩展的生命周期上下文。

  • 依赖注入:此服务使您能够以类型安全的方式将组件注入应用程序,并在部署时选择要注入的特定接口的实现。

此外,CDI还提供以下服务:

  • 与表达式语言(EL)集成,允许在JavaServer Faces页面或JavaServer Pages页面中直接使用任何组件

  • 装饰注入组件的能力

  • 使用类型安全拦截器绑定将拦截器与组件相关联的能力

  • 事件通知模型

  • 除了Java Servlet规范定义的三个标准范围(请求,会话和应用程序)之外的Web会话范围

  • 完整的服务提供程序接口(SPI),允许第三方框架在Java EE环境中完全集成

CDI的一个主要主题是松耦合。CDI执行以下操作:

  • 通过定义良好的类型和限定符来解耦服务器和客户端,以便服务器实现可能会有所不同

  • 通过分离协作组件的生命周期

    • 通过自动生命周期管理使组件具有上下文功能

    • 允许有状态组件像服务一样进行交互,纯粹是通过消息传递

  • 通过事件将消息生成器与消费者完全分离

  • 通过Java EE拦截器解耦正交问题

随着松耦合,CDI提供了强大的输入

  • 使用基于字符串的名称消除查找连接和相关性,以便编译器检测输入错误

  • 允许使用声明性Java注释来指定所有内容,在很大程度上消除了对XML部署描述符的需求,并且可以轻松提供内省代码并在开发时理解依赖结构的工具

CDI重新定义了bean的概念,超出了其在其他Java技术中的使用,例如JavaBeans和Enterprise JavaBeans(EJB)技术。在CDI中,bean是定义应用程序状态或逻辑的上下文对象的源。如果可以根据CDI规范中定义的生命周期上下文模型由容器管理其实例的生命周期,则Java EE组件是bean。

更具体地说,bean具有以下属性:

  • 一组(非空)bean类型

  • 一组拦截器绑定

  • 一个bean实现

bean类型定义了bean的客户端可见类型。几乎任何Java类型都可以是bean的bean类型。

  • bean类型可以是接口,具体类或抽象类,可以声明为final或具有final方法。

  • bean类型可以是具有类型参数和类型变量的参数化类型。

  • bean类型可以是数组类型。仅当元素类型相同时,才认为两种数组类型相同。

  • bean类型可以是原始类型。原始类型被认为与其对应的包装类型相同java.lang

  • bean类型可以是原始类型。

Analysis CDI的更多相关文章

  1. Servlet CDI example analysis

    上下文和依赖注入(CDI)使您的对象能够自动为它们提供依赖项,而不是创建它们或将它们作为参数接收.CDI还为您管理这些依赖项的生命周期. 例如,考虑以下servlet: @WebServlet(&qu ...

  2. Servlet CDI Example Analysis

    上下文和依赖注入(CDI)使您的对象能够自动为它们提供依赖项,而不是创建它们或将它们作为参数接收.CDI还为您管理这些依赖项的生命周期. 例如,来看下面这个servlet: @WebServlet(& ...

  3. servlet cdi analysis

    CDI中最令人兴奋的功能是允许每个人在Java EE平台中编写强大的扩展性功能,甚至于改变其核心本身.这些扩展性功能是可以完全移植到任何支持CDI的环境中. CDI的一些主要特性 1.类型安全:CDI ...

  4. Why many EEG researchers choose only midline electrodes for data analysis EEG分析为何多用中轴线电极

    Source: Research gate Stafford Michahial EEG is a very low frequency.. and literature will give us t ...

  5. Automated Memory Analysis

    catalogue . 静态分析.动态分析.内存镜像分析对比 . Memory Analysis Approach . volatility: An advanced memory forensics ...

  6. Sentiment Analysis resources

    Wikipedia: Sentiment analysis (also known as opinion mining) refers to the use of natural language p ...

  7. Call for Papers IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM)

    IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM) 2014 In ...

  8. 主成分分析(principal components analysis, PCA)

    原理 计算方法 主要性质 有关统计量 主成分个数的选取 ------------------------------------------------------------------------ ...

  9. 《利用Python进行数据分析: Python for Data Analysis 》学习随笔

    NoteBook of <Data Analysis with Python> 3.IPython基础 Tab自动补齐 变量名 变量方法 路径 解释 ?解释, ??显示函数源码 ?搜索命名 ...

随机推荐

  1. orcle数据库表中字段值含有单引号,如何模糊搜索?

    例如:T_table表中,name字段值为:字符串含有‘单引号’: SQL模糊搜索语句应该如下:select * from T_table where name like '%含有''单引号''%'

  2. 【转】Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  3. python核心编程(多线程编程)

    1.全局解释器锁 2.threading模块 thread类

  4. 清北学堂学习总结day2

    今天是钟皓曦大佬讲课,先来膜一波   %%%%% •数论 数论是这次培训的一个重点,那么什么是数论呢? 数论是研究整数性质的东西,所以理论上day2不会涉及小数QwQ (切入正题) •整除性: 设a, ...

  5. [经验交流] k8s mount 文件到容器目录

    docker 的 volume 可以 mount 单个文件(比如单个配置文件)到容器目录.同时保留原目录的内容.放到 k8s 中,结果却变成了这样:k8s 的 volume 把文件mount 到容器目 ...

  6. application.properties 文件和 application.yml 文件的区别

    yml文件的好处,天然的树状结构,方便查看,最终会转成application.properties 注意点: 1,原有的key,例如spring.jpa.properties.hibernate.di ...

  7. LeetCode第十九题-链表节点的删除

    Remove Nth Node From End of List 问题简介;给定链表,从链表末尾删除第n个节点并返回其头部 例: 给定链表:1-> 2-> 3-> 4-> 5, ...

  8. javascript闭包学习

    (function(){})()===>>>>函数会被立即执行function(){}是一个函数用括号包起来表示是函数表达式再加()表示函数自执行  如何理解闭包?1.定义和用 ...

  9. vue中展示数据

    1.v-bind,直接把数据绑定进去了.*100是因为传过来的数据为数字0.3这样子,要转换成百分比 2.整个的数据再data中定义之后,就能在页面直接绑定,v-for,v-if等单独再设置.

  10. WOW.js – 让页面滚动更有趣

    官网:http://mynameismatthieu.com/WOW/ 建议去官网一看 下载地址:https://github.com/matthieua/WOW 浏览器兼容 IE10+  Chrom ...