Servlet CDI Example Analysis

来源于官方文档: https://javaee.github.io/tutorial/cdi-basic001.html

上下文和依赖注入(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/Teay/p/10708941.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值