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部署描述符的需求,并且可以轻松提供内省代码并在开发时理解依赖结构的工具
@WebServlet("/cdiservlet")//url映射,即@WebServlet告诉容器,如果请求的URL是"/cdiservlet",则由NewServlet的实例提供服务。 public class NewServlet extends HttpServlet {//声明一个NewServlet类 并继承HttpServlet @Inject private Message message;//表示运行时将动态注入(实例化)一个Message @Override //重写父类doGet()方法 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.getWriter().write(message.get());//带文本格式打印输出message.get()返回的文本 } }
原文地址:https://www.cnblogs.com/dpqq/p/10732502.html
时间: 2024-10-30 09:52:07