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

就是這樣,非常簡單。