Dependency Injection (DI) este un model de proiectare care elimină dependența din codul de programare, astfel încât să poată fi ușor de gestionat și testat aplicația. Dependency Injection face codul nostru de programare slab cuplat. Pentru a înțelege mai bine DI, să înțelegem mai întâi Căutarea dependenței (DL):
Căutare dependență
Căutarea dependenței este o abordare în care obținem resursa după cerere. Pot exista diverse moduri de a obține resursa, de exemplu:
A obj = new AImpl();
În acest fel, obținem resursa (instanța clasei A) direct prin cuvânt cheie nou. O altă modalitate este metoda din fabrică:
A obj = A.getA();
În acest fel, obținem resursa (instanța clasei A) apelând metoda statică din fabrică getA().
Alternativ, putem obține resursa prin JNDI (Java Naming Directory Interface) ca:
Context ctx = new InitialContext(); Context environmentCtx = (Context) ctx.lookup('java:comp/env'); A obj = (A)environmentCtx.lookup('A');
Pot exista diverse moduri de a obține resursa pentru a obține resursa. Să vedem problema în această abordare.
Probleme de căutare a dependenței
Există în principal două probleme de căutare a dependenței.
Injecție de dependență
Dependency Injection este un model de design care înlătură dependența programelor. În acest caz, oferim informații din sursa externă, cum ar fi fișierul XML. Acesta face codul nostru să fie ușor cuplat și mai ușor de testat. În acest caz scriem codul ca:
class Employee{ Address address; Employee(Address address){ this.address=address; } public void setAddress(Address address){ this.address=address; } }
În acest caz, instanța clasei Address este furnizată de un surs extern, cum ar fi fișierul XML, fie prin metoda constructorului, fie prin metoda setter.
Două moduri de a efectua injectarea dependenței în cadrul Spring
Spring Framework oferă două moduri de a injecta dependență
- De către constructor
- Prin metoda Setter
Subiecte viitoare în Spring Dependency Injection
Injectarea dependenței de către constructorSă vedem cum putem injecta dependență de constructor.
Injectarea dependenței prin metoda setterului
Să vedem cum putem injecta dependență prin metoda setter.