English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Iniezione di dipendenze di Spring

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

Ricerca delle dipendenze

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.

Problemi di ricerca delle dipendenze

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.

Iniezione di dipendenza

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.

Due metodi per l'iniezione di dipendenze nel framework Spring

Il framework Spring fornisce due metodi per l'iniezione di dipendenze

Tramite costruttore Tramite metodo setter