Tomcat-----CDI编程实例

来源:互联网 发布:天谕白色头发数据 编辑:程序博客网 时间:2024/06/06 15:38

       这篇教程主要介绍如何在Tomcat中configure Contexts and Depedency Injection.

一、介绍

       由于Tomcat并不是一个JavaEE服务器,所以为了使Tomcat获得对CDI的支持必须手动添加一些依赖类库。接下来主要是CDI开发的一些配置和一个简单的CDI实例。

二、开发环境

1.Ubuntu 12.04

2 JDK 1.7.0.09

3. Weld 1.1.10

4 Tomcat 7.0.35

三、配置

        在Tomcat环境下开发CDI程序我们必须添加一些CDI实现的依赖类库,这篇教程中我们使用Weld。我们需要的maven依赖配置如下:

<dependencies>  <dependency>    <groupId>org.jboss.weld.servlet</groupId>    <artifactId>weld-servlet</artifactId>    <version>1.1.10.Final</version>  </dependency>  <dependency>    <groupId>javax.servlet</groupId>    <artifactId>javax.servlet-api</artifactId>    <version>3.0.1</version>    <scope>provided</scope>  </dependency></dependencies>
    

在web项目下的WEB-INF文件夹下创建一个空的beans.xml文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://java.sun.com/xml/ns/javaee"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"></beans>
    

最后一步我们在web.xml中配置CDI listener:

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee"  xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  id="WebApp_ID" version="3.0">  <display-name>Tomcat CDI example</display-name>  <listener>    <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>  </listener></web-app>

四、创建依赖注入的bean

     接下来定义一个要被依赖注入到servlet的bean.

接口定义:

package com.byteslounge.cdi.bean;public interface Service {  int doWork(int a, int b);}

实现类:

package com.byteslounge.cdi.bean;public class ServiceBean implements Service {  @Override  public int doWork(int a, int b) {    return a + b;  }}

       注意:我们并没有在定义的ServiceBean上声明任何的scope,那意味着ServiceBean会以Dependent scope被创建.即这个ServiceBean会与他的目标类(ServiceBean被注入的类、组件)有同样的scope.


五、使用servlet进行简单的测试

定义一个servlet来注入我们定义的ServiceBean:

TestServlet.javapackage com.byteslounge.cdi.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.inject.Inject;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.byteslounge.cdi.bean.Service;@WebServlet(name = "testServlet", urlPatterns = {"/testcdi"})public class TestServlet extends HttpServlet {  private static final long serialVersionUID = 2638127270022516617L;    @Inject  private Service service;    protected void doGet(HttpServletRequest request,    HttpServletResponse response)    throws ServletException, IOException {        int a = 2;    int b = 3;        PrintWriter out = response.getWriter();    out.println("Hello World: " + service.doWork(a, b));    out.close();  }}

      我们使用@Inject注解在service属性上注入我们的bean,表示当容器初始化的时候会自动寻找Service的实现———ServiceBean并将它注入到servlet中。

源代码下载configuring-cdi-with-tomcat-example.zip

原文地址:http://www.byteslounge.com/tutorials/configuring-cdi-with-tomcat-example

0 0
原创粉丝点击