在 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();
}
}
就是这样,非常简单。