English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
L'iniezione di dipendenza (DI) è uno schema di design che può rimuovere le dipendenze dal codice di programmazione, rendendo facile gestire e testare le applicazioni. L'iniezione di dipendenza rende il nostro codice di programmazione de-coupled. Per comprendere meglio il DI, diamo prima un'occhiata alla ricerca delle dipendenze (DL):
La ricerca delle dipendenze è un metodo per ottenere risorse dopo la domanda. Ad esempio, ci possono essere molti modi per ottenere risorse:
A obj = new AImpl();
In questo modo, possiamo ottenere risorse direttamente tramite la parola chiave new (l'istanza della classe A). Un altro metodo è il metodo factory:
A obj = A.getA();
In questo modo, possiamo ottenere risorse chiamando il metodo statico getA() (l'istanza della classe A).
O, possiamo ottenere risorse tramite JNDI (Java Naming and Directory Interface). :
Context ctx = new InitialContext(); Context environmentCtx = (Context) ctx.lookup("java:comp/env"); A obj = (A) environmentCtx.lookup("A");
Ci possono essere molti modi per ottenere risorse. Vediamo i problemi di questo metodo.
Ci sono principalmente due problemi di ricerca delle dipendenze.
C耦合: Il metodo di ricerca delle dipendenze rende il codice strettamente耦合ato. Se si modificano le risorse, è necessario apportare molte modifiche al codice. Test non facili: Questo metodo può causare molti problemi durante il test delle applicazioni, specialmente nei test a scatola nera.
L'iniezione di dipendenze è un modello di design che elimina i programmi. In questo caso, forniamo informazioni da una fonte esterna (ad esempio un file XML). Questo rende il nostro codice meno耦合ato e più facile da testare. In questo caso, scriviamo il codice come segue:
class Employee{ Address address; Employee(Address address){ this.address=address; } public void setAddress(Address address){ this.address=address; } }
In questo caso, l'istanza della classe Address è fornita da una fonte esterna (ad esempio un file XML) tramite costruttore o metodo setter.
Il framework Spring fornisce due metodi per l'iniezione di dipendenze
Tramite costruttore Tramite metodo setter