Vstavljanje odvisnosti (DI) je vzorec načrtovanja, ki odstrani odvisnost iz programske kode, tako da je upravljanje in testiranje aplikacije enostavno. Dependency Injection naredi našo programsko kodo ohlapno povezano. Da bi bolje razumeli DI, najprej razumemo iskanje odvisnosti (DL):
Iskanje odvisnosti
Iskanje odvisnosti je pristop, pri katerem dobimo vir po zahtevi. Do vira lahko pridete na različne načine, na primer:
A obj = new AImpl();
Na ta način dobimo vir (instanco razreda A) neposredno z novo ključno besedo. Drug način je tovarniška metoda:
niz v Javi
A obj = A.getA();
Na ta način dobimo vir (primerek razreda A) s klicem statične tovarniške metode getA().
Druga možnost je, da vir pridobimo z JNDI (Java Naming Directory Interface) kot:
Context ctx = new InitialContext(); Context environmentCtx = (Context) ctx.lookup('java:comp/env'); A obj = (A)environmentCtx.lookup('A');
Vir lahko pridobite na različne načine. Poglejmo težavo v tem pristopu.
Težave pri iskanju odvisnosti
Obstajata predvsem dve težavi pri iskanju odvisnosti.
metoda tostring v Javi
Injekcija odvisnosti
Vstavljanje odvisnosti je vzorec načrtovanja, ki odstrani odvisnost programov. V tem primeru zagotovimo informacije iz zunanjega vira, kot je datoteka XML. To naredi našo kodo ohlapno povezano in lažjo za testiranje. V tem primeru zapišemo kodo kot:
class Employee{ Address address; Employee(Address address){ this.address=address; } public void setAddress(Address address){ this.address=address; } }
V takem primeru se primerek razreda naslova zagotovi z zunanjim virom, kot je datoteka XML, bodisi z metodo konstruktorja ali nastavitve.
Dva načina za izvedbo vbrizgavanja odvisnosti v ogrodje Spring
Spring framework ponuja dva načina za vnos odvisnosti
- S strani Konstruktorja
- Po Setterjevi metodi
Prihajajoče teme v Spring Dependency Injection
Vbrizgavanje odvisnosti s konstruktorjemPoglejmo, kako lahko vnesemo odvisnost s konstruktorjem.
java vrednost enum
Vbrizgavanje odvisnosti z metodo nastavitve
Poglejmo, kako lahko vnesemo odvisnost z metodo nastavitve.