在 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();
    }
}

就是这样,非常简单。