cdi开始使用cdi


备注

本节概述了cdi是什么,以及开发人员为什么要使用它。

它还应该提到cdi中的任何大型主题,并链接到相关主题。由于cdi的文档是新的,您可能需要创建这些相关主题的初始版本。

实现

CDI是Java EE规范 。它指定了应该如何完成,以及必须提供哪些功能,但它实际上不是特定的库或代码集。要使用CDI,您需要使用CDI 实现

CDI规范的参考实现是一组称为Weld的库。 CDI规范的替代实现存在于Apache OpenWebBeans中 。这些实现中的任何一个都能够为您提供CDI的功能。如果您没有使用随这些实现之一一起提供的Java EE应用程序服务器,那么您可以选择并将其中一个实现安装到您的应用程序或运行时中。

安装或设置

有关设置或安装cdi的详细说明。

在Java SE环境中快速设置

如果您正在使用Java EE 6+应用程序服务器,则CDI是容器的一部分,您无需执行任何操作即可开始使用它。但CDI不仅限于Java EE应用程序服务器。它可以很容易地在Java SE应用程序或简单的servlet容器中使用。我们来看一下在简单的命令行应用程序中使用CDI。

步骤1.向POM添加依赖项。

<dependency>
    <groupId>org.jboss.weld.se</groupId>
    <artifactId>weld-se-core</artifactId>
    <version>3.0.0.Alpha15</version>
</dependency>
 

步骤2.添加beans.xml

CDI需要一个空的beans.xml文件,因此它可以扫描JAR中的类。所以创造

src/main/resources/META-INF/beans.xml
 

以下内容

<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="all">
    <scan>
        <exclude name="org.jboss.weld.**" />
    </scan>
</beans>
 

步骤3.初始化CDI

在此示例中,main(String [])方法初始化CDI,然后CDI用于获取类本身的实例以开始运行SE应用程序。

import java.util.Arrays;
import java.util.List;
import javax.enterprise.inject.spi.CDI;
import javax.inject.Inject;

public class Main {
    public static void main(String[] args) {
        CDI<Object> cdi = CDI.getCDIProvider().initialize();
        Main main = cdi.select(Main.class).get();
        main.main(Arrays.asList(args));
    }

    @Inject
    protected MyService myService;

    protected void main(List<String> args) {
        System.out.println("Application starting");

        // MyService object injected by CDI
        myService.go();
    }
}
 

就是这样,非常简单。