Servlet 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部署描述符的需求,并且可以轻松提供内省代码并在开发时理解依赖结构的工具

@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

Servlet CDI的相关文章

servlet CDI Example Analysis

原文链接:https://www.ibm.com/developerworks/cn/java/j-lo-cdijpa/ 关于 CDI JSR-299 规范原来叫做 Web Beans,其主要目的是为了整合 JSF 和 EJB.到 2009 年正式发布该规范时,JSR-299 已经改称 “Contexts and Dependency Injection for the Java EE platform”(简称 CDI ),整合 JSF 和 EJB 仍是其目的,但这并非 CDI 的唯一功能. 通

Servlet CDI Example Analysis

上下文和依赖注入(CDI)使您的对象能够自动为它们提供依赖项,而不是创建它们或将它们作为参数接收.CDI还为您管理这些依赖项的生命周期. 例如,来看下面这个servlet: @WebServlet("/cdiservlet") public class NewServlet extends HttpServlet { private Message message; @Override public void init() { message = new MessageB(); } @

servlet cdi analysis

CDI中最令人兴奋的功能是允许每个人在Java EE平台中编写强大的扩展性功能,甚至于改变其核心本身.这些扩展性功能是可以完全移植到任何支持CDI的环境中. CDI的一些主要特性 1.类型安全:CDI根据Java类型来注入对象,用以代替之前的根据名称来注入对象.当类型不能充分唯一判断出注入对象时,我们可以使用@Qualifier注解来指定注入.这可以让编译器更容易发现错误,并提供更便捷的重构. 2.POJO:几乎每一个Java对象都可以使用CDI来注入!包括EJB和JNDI的资源.持久化对象和已

Apache CXF 3.0: CDI 1.1 Support as Alternative to Spring--reference

With Apache CXF 3.0 just being released a couple of weeks ago, the project makes yet another important step to fulfill the JAX-RS 2.0 specification requirements: integration with CDI 1.1. In this blog post we are going to look on a couple of examples

J2EE CDI beans部署在独立的jar包中

本篇博客主要介绍,CDI开发中,将所有的CDI Bean打包到一个jar包中,如何解决org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [...] with qualifiers [@...] at injection point ... 异常. 介绍 在CDI项目中beans.xml的一个主要作用就是告诉容器我们所开发的CDI存在的位置,保证容器能够扫描到这些

servlet injection analysis

@WebServlet("/cdiservlet") public class NewServlet extends HttpServlet { private Message message; @Override ||重写doGet方法 public void init() { message = new MessageB(); ||对message初始化 } @Override public void doGet(HttpServletRequest request, HttpSe

Analysis servlet

@WebServlet("/cdiservlet") public class NewServlet extends HttpServlet { private Message message; @Override ||重写doGet方法 public void init() { message = new MessageB(); ||对message初始化 } @Override public void doGet(HttpServletRequest request, HttpSe

剖析servlet injection及源码分析.

@WebServlet("/cdiservlet") public class NewServlet extends HttpServlet { private Message message; @Override ||重写doGet方法 public void init() { message = new MessageB(); ||对message初始化 } @Override public void doGet(HttpServletRequest request, HttpSe

Description Resource Path Location Type The superclass "javax.servlet.http.HttpServlet" was not foun

一段时间没亲自建新项目玩乐,今天建立了一Maven project的时候发现了以下异常,Description Resource Path Location Type The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path index.jsp /easyBuy/src/main/webapp line 1 JSP Problem 经过查找原因,原来是因为忘记设置server