来源于官方文档: https://javaee.github.io/tutorial/cdi-basic001.html

上下文和依赖注入(CDI)使您的对象能够自动为它们提供依赖项,而不是创建它们或将它们作为参数接收。CDI还为您管理这些依赖项的生命周期。

例如,考虑以下servlet:

@WebServlet("/cdiservlet")
public class NewServlet extends HttpServlet {private Message message;@Overridepublic void init() {message = new MessageB();}@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException {response.getWriter().write(message.get());}
}

  

这个servlet需要一个实现Message接口的对象实例 :

public interface Message {public String get();
}

  

servlet创建自己的以下对象的实例:

public class MessageB implements Message {public MessageB() { }@Overridepublic String get() {return "message B";}
}

  

使用CDI,这个servlet可以声明它对Message 实例的依赖性,并让它由CDI运行时自动注入。新的servlet代码如下:(详细分析此段代码)

@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()返回的文本}
}

  

CDI运行时查找实现Message 接口的MessageB类,查找类,创建它的新实例,并在运行时将其注入servlet。要管理新实例的生命周期,CDI运行时需要知道实例的范围应该是什么。在此示例中,servlet仅需要实例来处理HTTP请求; 然后可以对实例进行垃圾回收。这是使用javax.enterprise.context.RequestScoped 注释指定的:

@RequestScoped
public class MessageB implements Message { ... }

MessageB类是一个CDI bean。CDI bean是CDI可以自动实例化,管理和注入以满足其他对象的依赖关系的类。几乎所有Java类都可以由CDI管理和注入。

转载于:https://www.cnblogs.com/xiaohuomiao/p/10650511.html

Servlet CDI Example Analysis相关推荐

  1. Analysis servlet

    @WebServlet("/cdiservlet") public class NewServlet extends HttpServlet {private Message me ...

  2. jsf和jsp_带有JSF,Servlet和CDI的DynamicReports和JasperReports

    jsf和jsp 在此示例中,我将展示如何将DynamicReport和JasperReports与Servlet和CDI集成. 工具: TIBCO Jaspersoft Studio-6.0.4.最终 ...

  3. 带有JSF,Servlet和CDI的DynamicReports和JasperReports

    在此示例中,我将展示如何将DynamicReport和JasperReports与Servlet和CDI集成. 工具: TIBCO Jaspersoft Studio-6.0.4.最终版 Eclips ...

  4. 使用Servlet 3.0,Redis / Jedis和CDI的简单CRUD –第1部分

    在这篇文章中,我们将构建一个简单的用户界面. 数据将存储在Redis中. 为了与Redis交互,我们将使用Jedis库. CDI用于Depedency Injection,而Servlet 3.0用于 ...

  5. 使用Servlet 3.0,Redis / Jedis和CDI的简单CRUD –第2部分

    在本文中,我们将重点介绍CDI和Servlet 3.0. 您可以在此处看到第1部分. 让我们从CDI开始. 当我开始撰写源自该系列的文章时,我并没有考虑撰写CDI. 真诚地说,我以前从未使用过. 这篇 ...

  6. java 会话共享_java – servlet如何工作?实例化,会话,共享变量和多线程

    假设,我有一个拥有大量servlet的Web服务器.对于在这些servlet之间传递的信息,我正在设置会话和实例变量. 现在,如果有2个或更多用户向此服务器发送请求,那么会话变量会发生什么?它们对所有 ...

  7. tomcat(19)Manager应用程序的servlet类

    [0]README 1)本文部分文字描述转自:"深入剖析tomcat",旨在学习"tomcat(19)Manager应用程序的servlet类" 的相关知识: ...

  8. eclipse开发jsf_在Eclipse上创建JSF / CDI Maven项目

    eclipse开发jsf 当我在研究JSF和CDI示例时,我认为提到创建JSF和CDI Maven项目所需的步骤会很有用. 您可以找到以下步骤. 工具类 默认情况下,M2E插件随附的Eclipse L ...

  9. 获取http请求标头_HTTP请求和标头参数的CDI拦截器–简单示例

    获取http请求标头 在使用Java EE开发和发展REST API的过程中,有些情况下您希望以更精细的方式(视情况)对传入的HTTP请求(特别是标头参数)进行"观察" Servl ...

最新文章

  1. 创建oracle数据库有哪些方法,oracle11g创建数据库的方法-Oracle
  2. BZOJ3864 hero meet devil
  3. java8 函数式编程_您必须学习Java 8的函数式编程吗?
  4. Python面向对象编程 self的含义
  5. Intellij IDEA中程序播放音乐 没声音
  6. 基于html制作一个介绍自己家乡的网站,排版整洁,内容丰富,主题鲜明
  7. oracle中ipad是什么意思,Oracle中Ipad和Rpad函数的用法
  8. Markdown 教程
  9. 深度学习CV(基础理论知识)
  10. 我的前端之路 (css篇)
  11. MBus协议详解(二)
  12. phpcms教程:PHPCMS v9循环显示多个栏目及栏目数据列表
  13. 程序员真实从零开始实操 赚钱渠道之二 群控+极速版
  14. Oracle删除表空间的同时删除数据文件
  15. 面向对象思想(详解)
  16. 【华为机试真题Java】统计射击比赛成绩
  17. 禁用和启用 Chrome 浏览器自动更新服务的批处理脚本
  18. 欺骗你的眼睛 -- 视觉游戏
  19. 怎么创建人物百度百科?怎么上百度百科?
  20. Win10怎样更改命令行窗口颜色

热门文章

  1. 正则 文字输入不超过5个汉字或者10个字符
  2. 【深度优先搜索】网格类问题:牛客网:机器人的运动范围
  3. 采用dlopen、dlsym、dlclose加载动态链接库
  4. FFmpeg源代码简单分析:结构体成员管理系统-AVClass
  5. django model filter_Django开发常用方法及面试题
  6. 【CCCC】L2-017 人以群分 (25分),,模拟水题
  7. 【云计算】阿里云云计算架构师ACE成长路线v2
  8. 【NOIP2014】【Luogu2118】比例简化(枚举)
  9. 【LOJ101】最大流(Dinic)
  10. 高并发→秒杀功能、难点共有数据排队、优化方案