CDI的分析
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类型可以是原始类型。
CDI的分析的更多相关文章
- Servlet CDI 例子分析
@WebServlet("/cdiservlet") //以@WebServlet注释开头,注释指定相对于上下文根的URL模式,即在根目录下使用/cdiservlet来访问 pub ...
- JBoss 系列七十:一个简单的 CDI Web 应用
概述 本文通过一个简单的 CDI Web 应用演示dependency injection, scope, qualifiers 以及EL整合.应用部署完成后我们可以通过http://localhos ...
- CDI services--Event(事件)
Cdi中的event事件,是整个CDI的精华所在之一.其有点类似设计模式中的观察者模式.但也有不同的地方.如下3点: 不仅是生产者(producers)从观察者(observers)解耦.观察者也从生 ...
- CDI(Weld)高级<4> Event(事件) (转)
目录[-] 1. Event payload(事件的有效载入) 2. Event observers(event的观察者) 3. Event producers(event生产者) 4.Annotat ...
- 20179223《Linux内核原理与分析》第五周学习笔记
视频内容知识学习 一.用户态.内核态和中断 1.内核态:处于高的执行级别下,代码可以执行特权指令,访问任意的物理地址,这时的CPU就对应内核态 2.用户态:处于低的执行级别下,代码只能在级别允许的特定 ...
- SQL优化(三)—— 索引、explain分析
SQL优化(三)—— 索引.explain分析 一.什么是索引 索引是一种排好序的快速查找的数据结构,它帮助数据库高效的查询数据 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据 ...
- Quantexa CDI(场景决策智能)Syneo平台介绍
Quantexa 大数据服务提供商, 使用实体解析, 关系分析和人工智能技术帮助客户进行数据处理和预防金融犯罪. 企业概览 2016年成立, 当前规模500人 服务特色是场景决策智能CDI(conte ...
- alias导致virtualenv异常的分析和解法
title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...
- 火焰图分析openresty性能瓶颈
注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...
随机推荐
- freeswitch编译安装,初探, 以及联合sipgateway, webrtc server的使用场景。
本文主要记录freeswitch学习过程. 一 安装freeswitch NOTE 以下两种安装方式,再安装的过程中遇到了不少问题,印象比较深刻的就是lua库找到不到这个问题.这个问题发生在make ...
- vue--数据显示模版上
首先需要知道 挂载点:是index.html文件下的一个dom节点 模板:挂载点里的内容,也就是模板内容. 组件: 页面上的某一部分内容.当我们的项目比较大时,可以将页面拆分成几个部分,每个部分就是一 ...
- Pandas 基础(4) - 读/写 Excel 和 CSV 文件
这一节将分别介绍读/写 Excel 和 CSV 文件的各种方式: - 读入 CSV 文件 首先是准备一个 csv 文件, 这里我用的是 stock_data.csv, 文件我已上传, 大家可以直接下载 ...
- 【Core】.NET Core 部署在Linux
安装.NET Core SDK 在CentOS上 1.右键打开命令行: 2.为了安装.NET,需要注册微软签名密钥和添加微软相关的支持.这个操作每台机器只能做一次. Add the dotnet p ...
- ASP.NET Core Swagger 显示接口注释
在Startup中 services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new Info { Title ...
- fastJson设置接口只接受json格式数据
spring-mvc/servlet.xml <mvc:annotation-driven> <mvc:message-converters register-defaults=&q ...
- CentOS7.5 Python3安装pip报错:ModuleNotFoundError: No module named '_ctypes' --Python3
1.问题:pyhontModuleNotFoundError: No module named '_ctypes' 操作系统:CentOS7.5 安装完Pyhotn3后(如何安装Python3,安装 ...
- 『TensorFlow』卷积层、池化层详解
一.前向计算和反向传播数学过程讲解
- vue去掉#——History模式
打开index.js文件 加在 Vue.use(Router) export default new Router({ mode: 'history', ] }) 若有不明白请加群号:复制 69518 ...
- 颜色(color)透明
颜色写法: 1.英文单词 backgroud-color:red: 2. #fff background-color:#fff; 3.#fefefe background-color:fefefe; ...