Dependency Injection (DI) je návrhový vzor, ktorý odstraňuje závislosť z programovacieho kódu, aby bolo možné aplikáciu jednoducho spravovať a testovať. Dependency Injection robí náš programovací kód voľne spojený. Aby sme lepšie porozumeli DI, najprv pochopme vyhľadávanie závislostí (DL):
Vyhľadávanie závislostí
Vyhľadávanie závislostí je prístup, pri ktorom získavame zdroj po dopyte. Zdroje je možné získať rôznymi spôsobmi, napr.
A obj = new AImpl();
Týmto spôsobom získame zdroj (inštanciu triedy A) priamo novým kľúčovým slovom. Ďalším spôsobom je továrenská metóda:
A obj = A.getA();
Takto získame zdroj (inštanciu triedy A) zavolaním metódy statickej továrne getA().
Alternatívne môžeme získať zdroj pomocou JNDI (Java Naming Directory Interface) ako:
Context ctx = new InitialContext(); Context environmentCtx = (Context) ctx.lookup('java:comp/env'); A obj = (A)environmentCtx.lookup('A');
Zdroje na získanie zdroja možno získať rôznymi spôsobmi. Pozrime sa na problém v tomto prístupe.
Problémy vyhľadávania závislostí
Existujú hlavne dva problémy vyhľadávania závislostí.
Injekcia závislosti
Dependency Injection je návrhový vzor, ktorý odstraňuje závislosť programov. V takom prípade poskytujeme informácie z externého zdroja, ako je súbor XML. Vďaka tomu je náš kód voľne spojený a ľahšie sa testuje. V takom prípade napíšeme kód takto:
class Employee{ Address address; Employee(Address address){ this.address=address; } public void setAddress(Address address){ this.address=address; } }
V takom prípade je inštancia triedy Address zabezpečená externým zdrojom, akým je napríklad súbor XML, buď pomocou metódy konštruktora alebo nastavovača.
Dva spôsoby vykonávania Dependency Injection v rámci Spring
Jarný rámec poskytuje dva spôsoby, ako vniesť závislosť
- Od konštruktéra
- Setterovou metódou
Nadchádzajúce témy v Spring Dependency Injection
Injekcia závislostí konštruktoromPozrime sa, ako môžeme vložiť závislosť pomocou konštruktora.
Dependency Injection setterovou metódou
Pozrime sa, ako môžeme vložiť závislosť metódou setter.