Comenzando con cdi

Configuración rápida en un entorno Java SE

Si está trabajando con un servidor de aplicaciones Java EE 6+, CDI es parte del contenedor y no necesita hacer nada para comenzar a usarlo. Pero CDI no se limita a los servidores de aplicaciones Java EE. Se puede usar en aplicaciones Java SE o contenedores de servlets simples con la misma facilidad. Echemos un vistazo al uso de CDI en una aplicación de línea de comandos simple.

Paso 1. Agregue dependencias a su POM.

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

Paso 2. Agregue beans.xml

CDI requiere un archivo beans.xml vacío para que pueda escanear el JAR en busca de clases. Así que crea

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

con lo siguiente

<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>

Paso 3. Inicializar CDI

En este ejemplo, el método principal (String []) inicializa CDI y luego CDI se usa para obtener una instancia de la clase para comenzar a ejecutar la aplicación 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();
    }
}

Eso es todo, realmente simple.

Instalación o configuración

Instrucciones detalladas sobre cómo configurar o instalar cdi.

Implementaciones

CDI es una especificación Java EE. Especifica cómo se deben hacer las cosas y qué funciones se deben proporcionar, pero en realidad no es una biblioteca específica o un conjunto de código. Para usar CDI, necesitará usar una implementación de CDI.

La implementación de referencia de la especificación CDI es un conjunto de bibliotecas conocidas como Weld. Existe una implementación alternativa de la especificación CDI como Apache OpenWebBeans. Cualquiera de estas implementaciones podrá brindarle las características de CDI. Si no está utilizando un servidor de aplicaciones Java EE que se envía con una de estas implementaciones, será usted quien seleccione e instale una de estas implementaciones en su aplicación o tiempo de ejecución.