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

例如,考虑以下servlet:

@WebServlet("/cdiservlet")
public class NewServlet extends HttpServlet {
private Message message; @Override
public void init() {
message = new MessageB();
} @Override
public 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() { } @Override
public String get() {
return "message B";
}
}

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

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

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

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

有关范围的更多信息,请参阅使用范围

MessageB类是一个CDI bean。CDI beans是CDI可以自动实例化,管理和注入以满足其他对象的依赖关系的类。几乎所有Java类都可以由CDI管理和注入。有关bean的更多信息,请参阅 关于Bean。包含CDI bean的JAR或WAR文件是bean归档文件。有关包装豆档案的更多信息,请参阅配置CDI应用在本章和包装CDI应用第27章,“上下文和依赖注入的Java EE:高级主题”

在此示例中,MessageB是唯一实现该Message接口的类 。如果应用程序具有多个接口实现,则CDI提供可用于选择要注入的实现的机制。有关更多信息,请参阅 第27章“Java EE的上下文和依赖注入:高级主题”中的本章中的使用限定符和 在CDI应用程序中 使用替代项

Servlet CDI example analysis的更多相关文章

  1. Servlet CDI Example Analysis

    上下文和依赖注入(CDI)使您的对象能够自动为它们提供依赖项,而不是创建它们或将它们作为参数接收.CDI还为您管理这些依赖项的生命周期. 例如,来看下面这个servlet: @WebServlet(& ...

  2. servlet cdi analysis

    CDI中最令人兴奋的功能是允许每个人在Java EE平台中编写强大的扩展性功能,甚至于改变其核心本身.这些扩展性功能是可以完全移植到任何支持CDI的环境中. CDI的一些主要特性 1.类型安全:CDI ...

  3. Servlet CDI 例子分析

    @WebServlet("/cdiservlet") //以@WebServlet注释开头,注释指定相对于上下文根的URL模式,即在根目录下使用/cdiservlet来访问 pub ...

  4. servlet cdi注入

    @WebServlet("/cdiservlet")//url映射,即@WebServlet告诉容器,如果请求的URL是"/cdiservlet",则由NewS ...

  5. 关于Java Microbenchmark的一点记录

    大家知道单元测试对代码质量的保障作用已经没什么可说的了.Microbenchmark(微基准测试)也是保证代码质量的重要手段,也是容易忽略的,它用来衡量一些小的代码片段的性能指标,完善的Microbe ...

  6. python获取全国各个城市pm2.5、臭氧等空气质量

    随着国家发展,中国很多城市的空气质量其实并不好,国家气象局会有实时统计,但是要去写爬虫爬取是十分麻烦的事情,并且官方网站也会做一些反爬虫措施,所以实现起来比较麻烦,最好的办法就是使用现成的免费接口,空 ...

  7. python、java、ruby、node等如何提取office文档中的内容?

    我相信大家都有过这样的需求,把doc.ppt.excel.pdf.txt中的文本内容提取出来.提取出来的文本内容可用于文档内容的全文索引,文档的基本内容摘要等.在度娘上搜索“如何提取文档内容”,确实有 ...

  8. 几句简单的python代码完成周公解梦功能

    <周公解梦>是靠人的梦来卜吉凶的一本于民间流传的解梦书籍,共有七类梦境的解述.这是非常传统的中国文化体系的一部分,但是如何用代码来获取并搜索周公解梦的数据呢?一般情况下,要通过爬虫获取数据 ...

  9. Analysis CDI

    CDI是一组服务,它们一起使用,使开发人员可以轻松地在Web应用程序中使用企业bean和JavaServer Faces技术.CDI设计用于有状态对象,还有许多更广泛的用途,允许开发人员以松散耦合但类 ...

随机推荐

  1. 自学stm32的一些个人经验

    1.首先我们先看看与STM32相关的文档 我们假定大家已经对STM32的书籍或者文档有一定的理解.如不理解,请立即阅读STM32的文档,以获取最基本的知识点. 如果你手上拥有ST官方主推的STM32神 ...

  2. 1. Scala概述

    1.1 概述 联邦理工学院洛桑(EPFL)的Martin Odersky于2001年开始设计Scala Scala是Scalable Language的简写,是一门多范式的编程语言 1.2 Scala ...

  3. js 自动类型转换

    js自动类型转换 1.==符号在判断左右两边数据是否相等时,如果数据类型一致,直接比较值即可 2.==符号左右数据类型不一致时,如果两方数据为布尔型.数值型.字符串型时,不为数字的那一方自动调用Num ...

  4. .net js有数据 但是跳转不到操作页

    首先看的是:js  的 model 传了 两个参数 在接着打开操作页 可以看到,这一页有三个参数.id是可以自动生成的,所以不让他显示,去掉 如上就可以了 ,传的参数数量不对   ,下次注意的撒!

  5. 60道Python面试题&答案精选!找工作前必看

    需要Word/ PDF版本的同学可以在实验楼微信公众号回复关键词"面试题"获取. 1. Python 的特点和优点是什么? 答案:略. 2. 什么是lambda函数?它有什么好处? ...

  6. VMware虚拟机共享宿主机硬盘步骤

    1.打开设置 2. 进去设置后,选择选项选项卡,启用文件夹共享,添加文件夹即可 注:虚拟机安装完成后我先装了 VMwareTools,然后进行的共享操作,貌似不安装时无法启用第三步,即 总是启用 按钮 ...

  7. Oracle创建新undo表空间最佳实践(包含段检查)

    在处理一则ORA-600 [4194]案例时,参考MOS文档:Step by step to resolve ORA-600 4194 4193 4197 on database crash (文档 ...

  8. 排序之选择排序(SelectSort)

    package com.sort; /* * 选择排序 * 把第一位与其他数进行比较,这样每轮比较都会出现一个最大值或最小值 * 根据需要让升序或降序排列 */ public class Select ...

  9. [转载来之雨松:NGUI研究院之为什么打开界面太慢(十三)]

    本文固定链接: http://www.xuanyusong.com/archives/2799

  10. cygwin vim can't write .viminfo

    问题 每次退出vim时,都提示 vim can't wirte .viminfo 运行环境 以管理员身份登录win7,并运行cygwin 排查过程 切换到家目录,查看发现.viminfo文件存在. 查 ...