Servlet CDI example analysis

Posted kltutz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

Servlet CDI

servlet cdi analysis

servlet CDI

其他 servlet 可以访问 jsf 应用程序中的 cdi bean 吗?

resteasy-cdi 中断部署到 Tomcat 7