在 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();
}
}
就是這樣,非常簡單。