cdiAan de slag met cdi


Opmerkingen

Deze sectie geeft een overzicht van wat cdi is en waarom een ontwikkelaar het misschien wil gebruiken.

Het moet ook alle grote onderwerpen binnen cdi vermelden en naar de gerelateerde onderwerpen verwijzen. Omdat de documentatie voor cdi nieuw is, moet u mogelijk eerste versies van die gerelateerde onderwerpen maken.

implementaties

CDI is een Java EE-specificatie . Het geeft aan hoe dingen moeten worden gedaan en welke functies moeten worden geboden, maar het is niet echt een specifieke bibliotheek of een set code. Om CDI te gebruiken, moet u een CDI- implementatie gebruiken .

De referentie-implementatie van de CDI-specificatie is een set bibliotheken die Weld worden genoemd . Een alternatieve implementatie van de CDI-specificatie bestaat als Apache OpenWebBeans . Beide implementaties kunnen u de kenmerken van CDI bieden. Als u geen Java EE-toepassingsserver gebruikt die wordt geleverd met een van deze implementaties, is het aan u om een van deze implementaties te selecteren en in uw toepassing of runtime te installeren.

Installatie of instellingen

Gedetailleerde instructies voor het instellen of installeren van cdi.

Snelle installatie in een Java SE-omgeving

Als u met een Java EE 6+ toepassingsserver werkt, maakt CDI deel uit van de container en hoeft u niets te doen om het te gebruiken. Maar CDI is niet beperkt tot Java EE-toepassingsservers. Het kan net zo gemakkelijk worden gebruikt in Java SE-toepassingen of eenvoudige servletcontainers. Laten we eens kijken naar het gebruik van CDI in een eenvoudige opdrachtregeltoepassing.

Stap 1. Voeg afhankelijkheden toe aan uw POM.

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

Stap 2. Voeg beans.xml toe

CDI vereist een leeg beans.xml-bestand, zodat het de JAR naar klassen kan scannen. Dus maak

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

met het volgende

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

Stap 3. Initialiseer CDI

In dit voorbeeld initialiseert de hoofdmethode (String []) CDI en vervolgens wordt CDI gebruikt om een instantie van de klasse zelf te krijgen om de SE-toepassing te starten.

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

Dat is alles, heel eenvoudig.