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")//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/vision-xixi/p/10660307.html

时间: 2024-08-30 17:04:40

Servlet CDI Example Analysis的相关文章

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 analysis

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

Servlet CDI

CDI是一组服务,它们一起使用,使开发人员可以轻松地在Web应用程序中使用企业bean和JavaServer Faces技术.CDI设计用于有状态对象,还有许多更广泛的用途,允许开发人员以松散耦合但类型安全的方式集成各种组件的灵活性 CDI 2.0由JSR 365指定.CDI使用的相关规范包括以下内容: JSR 330,Java的依赖注入 Managed Beans规范,Java EE平台规范的一个分支(JSR 366) CDI提供的最基本服务如下. 上下文:此服务使您能够将有状态组件的生命周期

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

随着国家发展,中国很多城市的空气质量其实并不好,国家气象局会有实时统计,但是要去写爬虫爬取是十分麻烦的事情,并且官方网站也会做一些反爬虫措施,所以实现起来比较麻烦,最好的办法就是使用现成的免费接口,空气质量指数分析,这里是笔者自己实现的一个python调用方式,代码如下: # -*- coding: utf-8 -*- # flake8: noqa __author__ = 'wukong' import urllib from urllib import urlencode #配置您申请的ap

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

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

Performance analysis of our own full blown HTTP

In previous post Let's do our own full blown HTTP server with Netty 4 you and I were excited by creation of our own web server. So far so good. But how good? Given ordinary notebook cat /proc/cpuinfo | grep model\ name model name      : Intel(R) Core

Webserver/servlet容器选型

最新在做一个企业级项目,在讨论到servlet容器的选择问题. 关于概念 有个概念必须要搞清楚.什么是web容器?详见维基百科 简而言之,web容器就是带有servlet容器的webserver.所以我很不喜欢web容器这个词语,web本身没有什么容不容器的概念,容器是针对servlet而言.也就是说,必定是java语言的. 在php等世界,就只有webserver了,因为它们是脚本语言,没有从jsp编译为servlet的过程.Apache Httpd就是webserver,但它不能解析JSP,