Servlet CDI example analysis
上下文和依赖注入(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的更多相关文章
- Servlet CDI Example Analysis
上下文和依赖注入(CDI)使您的对象能够自动为它们提供依赖项,而不是创建它们或将它们作为参数接收.CDI还为您管理这些依赖项的生命周期. 例如,来看下面这个servlet: @WebServlet(& ...
- servlet cdi analysis
CDI中最令人兴奋的功能是允许每个人在Java EE平台中编写强大的扩展性功能,甚至于改变其核心本身.这些扩展性功能是可以完全移植到任何支持CDI的环境中. CDI的一些主要特性 1.类型安全:CDI ...
- Servlet CDI 例子分析
@WebServlet("/cdiservlet") //以@WebServlet注释开头,注释指定相对于上下文根的URL模式,即在根目录下使用/cdiservlet来访问 pub ...
- servlet cdi注入
@WebServlet("/cdiservlet")//url映射,即@WebServlet告诉容器,如果请求的URL是"/cdiservlet",则由NewS ...
- 关于Java Microbenchmark的一点记录
大家知道单元测试对代码质量的保障作用已经没什么可说的了.Microbenchmark(微基准测试)也是保证代码质量的重要手段,也是容易忽略的,它用来衡量一些小的代码片段的性能指标,完善的Microbe ...
- python获取全国各个城市pm2.5、臭氧等空气质量
随着国家发展,中国很多城市的空气质量其实并不好,国家气象局会有实时统计,但是要去写爬虫爬取是十分麻烦的事情,并且官方网站也会做一些反爬虫措施,所以实现起来比较麻烦,最好的办法就是使用现成的免费接口,空 ...
- python、java、ruby、node等如何提取office文档中的内容?
我相信大家都有过这样的需求,把doc.ppt.excel.pdf.txt中的文本内容提取出来.提取出来的文本内容可用于文档内容的全文索引,文档的基本内容摘要等.在度娘上搜索“如何提取文档内容”,确实有 ...
- 几句简单的python代码完成周公解梦功能
<周公解梦>是靠人的梦来卜吉凶的一本于民间流传的解梦书籍,共有七类梦境的解述.这是非常传统的中国文化体系的一部分,但是如何用代码来获取并搜索周公解梦的数据呢?一般情况下,要通过爬虫获取数据 ...
- Analysis CDI
CDI是一组服务,它们一起使用,使开发人员可以轻松地在Web应用程序中使用企业bean和JavaServer Faces技术.CDI设计用于有状态对象,还有许多更广泛的用途,允许开发人员以松散耦合但类 ...
随机推荐
- springboot整合微软的ad域,采用ldap的api来整合,实现用户登录验证、
流程: 1.用户调登录接口,传用户名和密码2.用户名和密码在ad验证,验证通过后,返回当前用户的相关信息.(注:ldap为java自带的api不需要maven引入其他的)3.根据返回的用户信息,实现自 ...
- burp抓取ios设备https数据包
参考了网上其他相关教程,自己动手试了一次,有效的方法可确定为: 1.让PC机和移动端处于同一局域网, 2.burp设定监听所有接口,并监听一个端口 3.手机端设置代理,方式为手动,ip地址填PC在局域 ...
- poj1915
#include<iostream> using namespace std; #define SIZE 305 int vis[SIZE][SIZE]; int sx,sy,ex,ey; ...
- cygwin的sh: line 15: $'\r': command not found错误
安装dos2unix工具,转换一下sh文件即可 apt-cyg install dos2unix dos2unix xxx.sh
- Linux 文件系统下的压缩、解压命令
参考文献:Linux下的tar压缩解压缩命令详解 - 智昕 - 博客园
- 爬虫中报 SSLError 错误
- linux 对MTD分区nand flash的烧写和读取
使用mtd-utils工具实现对flash的升级分区的烧写yaffs2 yaffs2的格式是根据所使用的nandflash来制作的,不同的nandflash,得到的yaffs2是不一样的,具体可以参考 ...
- Py之any函数【转载】
转自:http://www.runoob.com/python/python-func-any.html 1.any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 ...
- python 时间戳和时间格式互相转换
#!/usr/bin/python3 # -*- coding: utf-8 -* import time def str_to_stamp(): # 转换显示格式 time1 = time.strp ...
- vs code中文扩展包
vs code 中文拓展安装失败时,可以手动下载安装,下载对版本的中文包. https://marketplace.visualstudio.com/_apis/public/gallery/publ ...