logo

Injecția de dependență în primăvară

  1. Injecția de dependență în primăvară
  2. Căutare dependență
  3. Injecție de dependență

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.

    cuplaj strânsAbordarea de căutare a dependenței face codul strâns cuplat. Dacă resursa este schimbată, trebuie să facem multe modificări în cod.Nu este ușor de testatAceastă abordare creează o mulțime de probleme în timpul testării aplicației, în special în testarea cutiei negre.

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 constructor

Să vedem cum putem injecta dependență de constructor.


Injectarea dependenței prin metoda setterului

Să vedem cum putem injecta dependență prin metoda setter.