2013-12-12 11 views
10

Vorrei utilizzare l'integrazione delle dipendenze in un'applicazione Java 7 di grandi dimensioni, ma non sono sicuro di dove iniziare.Iniezione di dipendenza in un'applicazione autonoma Java 7

Ho scritto una piccola applicazione di prova:

public class Main { 

    @Inject 
    MyInterface myInterface; 

    public static void main(String[] args) { 

     Main m = new Main(); 
     System.out.println(m.myInterface.getMessage()); 

    } 

} 

con un'interfaccia:

public interface MyInterface { 

    String getMessage(); 

} 

e un'implementazione di interfaccia:

@Singleton 
public class MyInterfaceImpl implements MyInterface { 

    public String getMessage() { 
     return "Hello World!"; 
    } 

} 

Il pom.xml contiene una dipendenza:

<dependencies> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>7.0</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

Questa applicazione compila, ma ovviamente si blocca con uno NPE quando si tenta di stampare il messaggio. L'iniezione non è avvenuta.

Quindi, la mia domanda sono:

  1. Può Dependency Injection essere raggiunto in un'applicazione stand-alone Java 7?
  2. Quali altre dipendenze devo includere per farlo funzionare?
  3. Qualcuno ha un semplice esempio operativo da condividere (non ne ho trovato nessuno)?
+0

Qual è la tua definizione di applicazione standalone? –

+0

Non ha bisogno di un server web/contenitore per eseguire ... Java SE ... – JVerstry

risposta

12

Non esiste un solo modo per utilizzare l'integrazione delle dipendenze con Java.

(1) È possibile ad esempio utilizzare il CDI standard, in cui l'implementazione di riferimento è Weld. C'è documentazione su using Weld in a Java SE environment, che cosa è probabilmente ciò che intendi per applicazione standalone.

In alternativa è anche possibile utilizzare Spring Framework, che supporta anche l'annotazione CDI comune (ad esempio @Inject). In questo caso, in genere creerai un ClasspathXmlApplicationContext all'avvio del programma e consenti a Spring di gestire (creare/distruggere) tutti i bean necessari.

(2) Le attuali dipendenze importano solo l'API di Java EE. Quindi non sono sorpreso se si ottiene un NullPointerException all'esecuzione. Devi aggiungere un'implementazione (come Weld) o usare Spring.

(3) Vedere i collegamenti sopra.

Inoltre, dare un'occhiata a Differences between Java EE 6 CDI Implementations per ottenere informazioni su altre implementazioni disponibili del CDI Java.

+0

Saldare, mai sentito parlare. Leggendo il documento, sembra fantastico ... – JVerstry