Čo je injekcia závislostí? - Vedieť, ako implementovať injektáž závislostí



Tento článok o Čo je Závislosť Injekcia je komplexný sprievodca Závislosťou Injekcie s praktickým spustením na jar.

Vo svete, kde pracujeme s programovacími jazykmi každý deň, každý z nás inklinuje k hľadaniu metód a trikov, ktoré by nám uľahčili život. Dependency Injection je jednou z týchto techník, ktorej cieľom je pomôcť vývojárskym kódom ľahko poskytnutím závislostí iného objektu. V tomto článku o Čo je Závislosť Injekcia vám pomôžem podrobne pochopiť túto techniku.

V tomto článku sa budeme venovať nasledujúcim témam:





Začnime teda týmto článkom.

Čo je to Dependency Injection?

Dependency Injection je schopnosť objektu dodávať závislosti iného objektu.



Som si celkom istý, že podľa vyššie uvedenej technickej definície ste možno nič nepochopili. Dovoľte mi teda, aby som za vás odstránil zmätok.

Keď počujete výraz závislosť, čo vás napadne?

binárny až desatinný java kód

Je zrejmé, že niečo sa spolieha na niečo iné, pokiaľ ide o podporu, však?



To je to isté, aj v prípade programovania.

Závislosť od programovania je prístup, pri ktorom trieda využíva špecifické funkcie inej triedy. Napríklad, ak vezmete do úvahy dve triedy A a B a poviete, že trieda A používa funkcie triedy B, znamená to, že trieda A má závislosť triedy B. Ak teraz programujete v Jave, musíte vedieť že, musíšvytvorte inštanciu triedy B skôr, ako sú objekty použité triedou A.

Druhy tried - Čo je to Dependency Injection - Edureka

Takže ak pre vás teraz musím definovať Dependency Injection, potom sa proces vytvárania objektu pre inú triedu a nechanie triedy priamo pomocou závislosti nazýva Dependency Injection. Zahŕňa hlavne tri triedy:

  • Trieda klienta: Toto je závislá trieda a závisí to od triedy Service.

  • Trieda služby: Táto trieda poskytuje službu klientskej triede.

  • Trieda injektora: Táto trieda je zodpovedná za vloženie objektu triedy služieb do triedy klienta

Teraz, keď ste pochopili, čo je Dependency Injection, dovoľte mi, aby som vás ďalej oboznámil s princípom, na ktorom je Dependency Injection založený.

Inverzia kontroly

Ako som už spomenul vyššie, inverzia riadenia je princíp, na základe ktorého sa vyrába závislá injekcia. Ako už názov napovedá, inverzia kontroly sa v zásade používa na prevrátenie rôznych druhov ďalších povinností triedy, a nie na hlavnú zodpovednosť.

Ak vám musím vysvetliť jednoduchšie slová, pouvažujte nad príkladom, v ktorom máte schopnosť variť. Podľa princípu IoC môžete riadenie obrátiť, takže namiesto varenia jedla môžete priamo objednávať zvonku, kde dostanete jedlo na dosah ruky. Takto sa proces jedla dodávaného k vašim dverám nazýva inverzia kontroly.

Nemusíte si variť sami, môžete si objednať jedlo a nechať doručovateľa, aby vám jedlo doručil. Týmto spôsobom sa nemusíte starať o ďalšie povinnosti a sústrediť sa iba na hlavnú prácu.

Teraz, keď poznáte princíp závislého vstrekovania, dovoľte mi, aby som vás previedol cez jednotlivé typy závislého vstrekovania.

Typy injekcií závislostí

Existujú hlavne tri typy Dependency Injection:

  • Vstrekovanie konštruktéra: V tomto type injekcie injektor dodáva závislosť prostredníctvom konštruktora triedy klienta.

  • Nastavovač vstrekovania / vstrekovanie vlastností: V tomto type vstrekovania injektorová metóda injektuje závislosť na nastavovacej metóde vystavenej klientom.

  • Vstrekovanie rozhrania: V tomto type vstrekovania injektor používa rozhranie na zabezpečenie závislosti na triede klienta. Klienti musia implementovať rozhranie, ktoré vystaví anastavovacia metódaktoréprijíma závislosť.

Doteraz dúfam, že ste pochopili skutočnosť, že aplikácia Dependency Injection je zodpovedná za vytváranie objektov, za pochopenie toho, ktoré triedy tieto objekty vyžadujú, a za posledné dodanie týchto tried objektom. Pozrime sa teda na výhody injekcie závislostí.

Výhody injekcie závislostí

Predtým, ako uvediem výhody Injekcie závislostí, dovoľte mi vysvetliť vám potrebu tejto injekcie na priemyselnej úrovni, aby ste lepšie pochopili výhody.

Zvážte scenár, v ktorom máte triedu e-mailov, ktorej výlučnou zodpovednosťou je starať sa o prijaté e-maily. Teraz bude táto trieda obsahovať objekty ako „Na e-mailovú adresu“, „Z e-mailovej adresy“, „Predmet a telo e-mailu“.

Ak si teraz spoločnosť chce uložiť textové a zvukové správy, myslíte si, že táto trieda môže správu uložiť?

Odpoveď je nie?

Je to preto, že e-mailová trieda nedokáže spracovať parametre textových a zvukových správ. V takýchto prípadoch budete musieť triedu znovu vytvoriť. Teraz je znovuvytvorenie triedy dosť ťažkopádna práca, najmä ak ju musíte pravidelne navštevovať. Namiesto toho, ak použijete Dependency Injection, môžete meniť objekty za behu. Týmto spôsobom teda nemusíte znovu vytvárať triedu, ktorá vám v mnohých ohľadoch ďalej pomáha.

Ak teda musím zhrnúť výhody injekcie závislostí, potom sú uvedené nasledujúce výhody:

Dobre, takže teraz, keď poznáte výhody aplikácie Dependency Injection, posuňme sa ďalej a pozrite sa, ako implementovať aplikáciu Dependency Injection pomocou nástroja Spring Boot.

Ako implementovať DI pomocou Spring Boot?

Krok 1: Otvor tvoj Zatmenie IDE a vytvorte Aplikácia Spring Boot kliknutím pravým tlačidlom myši a výberom možnosti Projekt jarného štartéra . Potom uveďte názov projektu a kliknite na Skončiť .

Ak chcete získať projekt Spring Starter Project, musíte si nainštalovať Spring Tool Suite z Eclipse Marketplace. V prípade, že nemáte nainštalovanú Spring Too Suite, pozrite si môj článok na .

Automaticky uvidíte, že sa vytvorí súbor aplikácie, ako je uvedené nižšie.

rozdiel medzi prepísaním a preťažením v Jave

Krok 2: Ďalej vytvorte triedu v rovnakom balíku. Kliknite pravým tlačidlom myši na súbor -> vyberte Trieda a spomenúť názov triedy. Potom kliknite na Skončiť . Takto sa vytvorí Trieda spis. Tu som vytvoril triedu Zákazníci. Pozri nižšie.

Krok 3: Potom vložme do triedy niektoré vlastnosti. Takže, povedzme, zahrnieme ID zákazníka, meno zákazníka a Názov kurzu. Nižšie uveďte kód.

balíček com.example.demo // názov balíka verejná trieda Zákazníci {private int custid private String reťazec custname private String coursename}

Krok 3.1: Keď s tým skončíte, musíte generovať metódy Getter a Setter pre tieto vlastnosti. Ak to chcete urobiť, vyberte tieto vlastnosti a kliknite pravým tlačidlom myši. Potom vyberte Zdroj -> Generujte metódy Getter a Setter.

Váš doterajší kód by mal byť nasledovný:

balíček com.example.demo verejná trieda Zákazníci {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname } public void setCustname (názov reťazca zákazníka) {this.custname = meno zákazníka} public String getCoursename () {return coursename} public void setCoursename (reťazec coursename) {this.coursename = coursename}}

Teraz zvážte scenár, keď musíte vytvoriť objekt pre zákazníkov a nechcete to robiť ručne. V takom scenári potom budete musieť použiť Dependency Injection, aby ste dostali objekty, kedykoľvek to požadujete.

Ďalej sa teda pozrime, ako môžeme dosiahnuť to isté.

Krok 4: Najskôr zmeňte zabehnúť linku v súbor aplikačnej triedy na toto:

ConfigurableApplicationContext context = SpringApplication.run (DemoApplication.class, args)

Poznámka: Ak sa zobrazí chyba, importujte nasledovné:

importovať org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.context.ConfigurableApplicationContext

Tento vyššie uvedený riadok kódu vráti objekt v čase vykonania. Teraz pridajte nasledujúci kód do súboru aplikácie.

customers c = context.getBean (customers.class)

Vyššie uvedený riadok povie kompilátoru, aby vrátil objekt triedy zákazníka. Pozri nižšie.

Krok 4.1: Teraz, skontrolovať, či to funguje alebo nie, vy sa môže vrátiť do triedy Zákazník a pridajte nasledujúcu metódu:

public void display () {System.out.println ('Objekt sa vrátil úspešne')}

Táto metóda zobrazí výstup „Objekt úspešne vrátený“ po úspešnom vykonaní.

Krok 4.2: Ďalej sa musíte vrátiť k súboru aplikácie a spomenúť nasledujúce:

c.display ()

Týmto voláte objekt triedy Customers s odkazom na metódu zobrazenia. Na nasledujúcej obrázku nájdete kód triedy Aplikácia doteraz:

Teraz, ak realizujete projekt, uvidíte s výnimkou kvalifikovanej fazule typu . Je to preto, že trieda zákazníkov, ktorú ste definovali, nie je Spring Bean, t. J. Nie je Spring Object. Pozri nižšie.

Krok 4.3: Aby sme to teda povedali jarnému kontajneru, potrebujeme objekt triedy zákazníka. K tomu je potrebné spomenúť @ Anotácia komponentu , v triede Zákazník. Kód v triede Zákazníci by mal byť uvedený nižšie:

balík com.example.demo import org.springframework.stereotype.Component @Component public class Zákazníci {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname} public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} public void display () {System.out.println ('Objekt sa vrátil úspešne')}}

Potom, keď spomeniete zákazníkov c = context.getBean (customers.class) kompilátor skontroluje, či je v kontajneri k dispozícii fazuľa zákazníka alebo nie.

Ak je Bean k dispozícii, potom jarný rámec vkladá do vašej aplikácie objekt zákazníka. V podstate teda tento objekt vytvára jarný framework, ktorý je možné v aplikácii ďalej použiť.

Takže ak teraz vykonám tento projekt, uvidíte výstup, ktorý sa objekt úspešne vrátil. Pozri nižšie.

Takto môžete v zásade implementovať Dependency Injection.

Príklad: Vkladanie závislostí pomocou poznámky s automatickým pripojením

Dúfam, že ste pochopili, ako funguje Dependency Injection v Spring Boot. Teraz poďme rozšíriť tento príklad a ďalej si ukážeme, ako trieda závislá na druhej triede používala funkcie tejto triedy v Spring Boot.

Krok 1: Vytvorte nový spis triedy , opäť kliknutie pravým tlačidlom myši na balík a výberom Nové -> Trieda. Teraz uveďte názov triedy, ako je uvedené nižšie, a kliknite na Skončiť.

Krok 2: Ďalej uveďme pre triedu niektoré vlastnosti. Takže, povedzme, zahrnieme TechID, Techname. Nižšie uveďte kód.

balíček com.example.demo verejná trieda Technológie {private int techid private String techname}

Krok 2.1: Keď s tým skončíte, generujte Metódy Getter a Setter pre tieto vlastnosti kliknite pravým tlačidlom myši na súbor a potom vyberte Zdroj -> Generovať metódy Getter a Setter.

Krok 3: Teraz povedzme, že musíme vytvoriť metódu, ktorá vytlačí „ Úspešný „. Za týmto účelom uveďte kód:

public void tech () {System.out.println ('Úspešné')}

Váš doterajší kód by mal vyzerať takto:

balíček com.example.demo public class Technologies {private int techid private String techname public int getTechid () {return techid} public void setTechid (int techid) {this.techid = techid} public String getTechname () {return techname} public void setTechname (technický reťazec) {this.techname = techname} public void tech () {System.out.println ('Successful')}}

Krok 4: Teraz, zavolať na tech () metóda v zákaznícka trieda , musíte vytvoriť objekt triedy technológií. Takže v triede zákazníkov uveďte nasledujúci riadok kódu:

techdetail súkromných technológií

Krok 4.1: Keď s tým skončíte, generujte Metódy Getter a Setter pre tieto vlastnosti pravým tlačidlom myši kliknite na súbor a potom vyberte Zdroj -> Generovať metódy Getter a Setter.

Krok 5: Ďalej použite tech () metóda , musíte spomenúť techdetail.tech () pod spôsob zobrazenia triedy zákazníkov . Tiež sa uistite, že je uvedený objekt techdetail @ Anotácia komponentu je Trieda technológií. Pozri nižšie.

rozdiel medzi qtp a selénom

Teraz, keď realizujete tento projekt, uvidíte a Výnimka nulového ukazovateľa . Je to preto, že teraz Trieda zákazníka je závislá od triedy Technologies, a napriek tomu nevie o existencii triedy Technologies .

Aby ste umožnili zákazníkovi rozpoznať triedu Technologies, musíte vložiť @ Automatická anotácia v triede Zákazníci. Váš konečný kód triedy zákazníkov by mal byť nasledovný:

balíček com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component public class Customers {private int custid private String custname private String coursename @Autowired private Technologies techdetail public Technologies getTechdetail ( ) {return techdetail} public void setTechdetail (Technologies techdetail) {this.techdetail = techdetail} public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} public void display () {System.out.println ( „Objekt bol úspešne vrátený“) techdetail.tech ()}}

Po vykonaní týchto súborov uvidíte výstupy ako Objekt vrátený úspešne a Úspešný, čo znamená, že naša závislosť tried bola splnená. Pozri nižšie.

Teraz, keď ste s článkom hotoví, pozrite sa na autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete.

Máte na nás otázku? Uveďte to v časti komentárov v tejto časti „Čo je to Injekcia závislostí? “Článok a ozveme sa vám čo najskôr.