zoukankan      html  css  js  c++  java
  • 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管理和注入。

  • 相关阅读:
    Ext.Net 1.2.0_利用 Ext.Net 自定义 GridPanel Ajax 控件
    ASP.NET_0404_ASP.NET 重定向:页面传值
    程序设计_洗牌程序
    表单/验证表单——千万不要做一个只会拖控件、“照猫画虎”、copy/paste 程序员
    ASP.NET_0204_ASP.NET 重定向:如何将用户重定向到另一页
    Oracle 11g R1(11.1) Joins表连接
    隐藏 iframe 技术——Ajax 时代一个重要的环节
    Ext.Net 1.2.0_改变 Ext.Net.GridPanel 某行或某列的式样
    数据结构冒泡排序和直接插入排序
    XMLHttpRequest——Ajax 时代的到来
  • 原文地址:https://www.cnblogs.com/vision-xixi/p/10660307.html
Copyright © 2011-2022 走看看