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压缩包 ...
随机推荐
- UVA1428 Ping pong
思路 分别统计这个位置左边和右边各有多少大于和小于它的数,乘起来即可 使用权值树状数组 代码 #include <cstdio> #include <algorithm> #i ...
- DAY15 模块
一.模块 1.1 模块的定义:模块就是一系列功能的集合体 1.2 模块的四种存在方式: 1.使用python编写的.py文件(任一py文件都可以作为模块) 2.包:一堆py文件的集合体 3.使用C编写 ...
- docker-compose 手工指定容器IP
首先明确两点: 1只有自定义网络,才能手工指定每个容器的ip.默认的bridge是不行的! 2 手工设定了网段比如172.19.0.0 不影响docker在host装的网卡docker0 的172 ...
- echarts之折线图配置(附带图例很多做成分页效果)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- JS封装addClass、removeClass
addClass封装:1.先把原有的类名和需要添加的类名用“”切割.拼接. 2.查重,把所有类名遍历,重复的去掉. 3.“”拼接. function addClass(ele , cName) { v ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 扩展行显示细节
数据网格(datagrid)可以改变它的视图(view)来显示不同的效果.使用详细视图,数据网格(datagrid)可以在数据行的左边显示展开按钮("+" 或者 "-&q ...
- mongodb笔记(二)
1.使用mongodb的shell连接Mongodb服务: 标准URL连接语法: mongodb://[username:password@]host1[:port1][,host2[:port2], ...
- 广工十四届校赛 count 矩阵快速幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6470 题意:求,直接矩阵快速幂得f(n)即可 构造矩阵如下: n^3是肯定得变换的,用二项式展开来一点 ...
- day35-python 操作memcache一
memcache简介 Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象减少读取数据库的次数,从而提高动态.数据库驱动网站的速度. ...
- JAVA中解决Filter过滤掉css,js,图片文件等问题
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOE ...