CDI框架笔记-weld reference中文翻译(一)-CDI Reference Implementation
我们下一个工作目标要用CDI来实现了。架构师提供了我们的学习文档,他说除了此文档以外没什么好的中文资料了
Weld 2.4.1.Final - CDI Reference Implementation
文档地址:http://docs.jboss.org/weld/reference/latest/en-US/html_single/
PDF下载地址:http://docs.jboss.org/weld/reference/latest/en-US/pdf/weld-reference.pdf
由于本人看书喜欢斟字酌句(这真不是个好习惯,看一本书要大半年,简直蛋疼),所以既然要做笔记,干脆翻译了。文档本身也是很精练,没什么废话,所以翻译完了也可以当做笔记了。
请尊重成果,如需转载请注明出处,谢谢合作:)http://equalxx.iteye.com/,文档页数尚可,近期每天更新。本人也是小白一个,所以翻译有问题希望大家一起指出并改正,大部分程序员英文阅读都可以,所以也建议尽可能读英文,对一些概念理解得更准确。
特别感谢谷歌翻译。
Part I. Beans
CDI服务提供了:
- 对于状态对象,将其改进后的生命周期绑定在定义明确的上下文中
- 一种安全的依赖注入方法、
- 通过事件消息机制进行对象间交互
- 一个更好的方式去给对象绑定拦截器,以及一种叫做装饰器的新的拦截器,这种拦截器更适合解决业务问题。
- SPI用于容器开发可移植的扩展程序
绑定到生命周期上下文的对象称为bean。 CDI包括对几个的内置支持
不同种类的bean,包括以下Java EE组件类型:
- 托管bean
- EJB 会话bean
托管bean和EJB会话bean都可能注入其他bean。 但是一些其他的对象,
其本身不是本文使用的意义上的bean,也有可以通过CDI注入的bean。
在Java EE平台中,以下类型的组件可能注入了bean:
- 消息驱动的bean,
- 拦截器,
- servlet,servlet筛选器和servlet事件监听器,
- JAX-WS服务端点和处理程序,
- JAX-RS资源,提供程序和javax.ws.rs.core.Application子类
- JSP标记处理程序和标记库事件监听器。
CDI解决了一些不熟悉API用户的以下疑问:
- 这个对象的生命周期是什么
- 它能同时有多少客户端
- 它是多线程的吗
- 我如何从客户端访问它
- 我需要显式地销毁它吗
- 在我当前没有使用它的时候,我需要在哪里保持引用,
- 我该怎样定义一个可替换的实现方法,以方便不同的部署场景
- 我该如何跟其它对象共享此对象
CDI不仅仅是一个框架,它是一个完整的编程框架。CDI的主旨是强类型松耦合。让我们研究下这句话是什么意思。
一个bean只规定了它所依赖的其它bean的类型和语义,它不需要知道确切的生命周期,具体实现,线程模型,或者任何和bean互动的其他客户端。但更强大的是,一个bean的具体实现,生命周期和线程模型可以根据部署场景而变化,而不影响任何客户端。这种松耦合可以使代码更容易维护。
事件,拦截器和装饰器增强了这种模型中固有的松耦合:
- 用事件消息机制分离事件产生者和消费者
- 用拦截器分离技术实现和业务逻辑
- 装饰器允许划分业务关系
更强的是,CDI在提供这些性能的同时保持着类型安全。CDI管理对象并不依赖基于字符串的标识符,取而代之的是,CDI利用的是java对象模型中已经写入的信息,使用一种新的编程模式(叫做限定符注解),去管理bean,及它们的依赖,以及拦截器,装饰器,和它们的事件消费者。部署信息使用最精简的XML描述符来设定。
但是CDI不是一个局限的编程模型,它不会指定你怎么去构建你的应用程序,怎么处理持久性,或是规定用什么web框架。这些东西都是由你自己决定的。
CDI提供了一个全面SPI,可以让未来javaEE规范定义的其他类型的对象,或是第三方的框架,利用CDI服务和对其他类型对象的交互来进行无缝整合。CDI受到许多现有Java框架的影响,包括Seam,Guice和Spring。但CDI有着自己独特的特性,比Seam更安全(类型安全),比Spring更具状态性且不那么多xml配置,比Guice有更多的web和企业级应用。但是它离不开来自这些框架的启发以及辛勤工作的JSR-299和JSR-346专家组(EG)。最后,CDI是一个Java Community Process [http://jcp.org](JCP)标准。 Java EE 7要求所有兼容的应用程序服务器都要支持JSR-346(甚至在Web配置文件中)。
未完待续
请尊重成果,如需转载请注明出处,谢谢合作:)http://equalxx.iteye.com/