Co je injekce závislostí? - Know How to Implement Dependency Injection



Tento článek o Co je Dependency Injection je komplexní průvodce Dependency Injection s praktickým spuštěním na jaře.

Ve světě, kde každodenně pracujeme s programovacími jazyky, máme všichni tendenci hledat metody a triky, které nám usnadní život. Dependency Injection je jedna taková technika, která si klade za cíl pomoci kódu vývojáře snadno tím, že poskytne závislosti jiného objektu. V tomto článku o What is Dependency Injection vám pomůžu podrobně porozumět této technice.

V tomto článku se budeme zabývat následujícími tématy:





Pojďme tedy začít s tímto článkem.

Co je Dependency Injection?

Dependency Injection je schopnost objektu dodat závislosti jiného objektu.



Jsem si docela jistý, že podle výše uvedené technické definice jste možná nic nepochopili. Dovolte mi tedy, abych vám zmatil zmatek.

Když uslyšíte pojem závislost, co vás napadne?

k čemu se mongodb používá

Je zřejmé, že něco spoléhá na něco jiného pro podporu, že?



To je stejné, i v případě programování.

Závislost v programování je přístup, při kterém třída používá specifické funkce jiné třídy. Například pokud vezmete v úvahu dvě třídy A a B a řeknete, že třída A používá funkce třídy B, znamená to, že třída A má závislost třídy B. Nyní, pokud kódujete v Javě, musíte vědět to musítevytvořte instanci třídy B dříve, než jsou objekty používány třídou A.

Druhy tříd - Co je to Dependency Injection - Edureka

Takže pokud pro vás teď musím definovat Dependency Injection, pak se proces vytváření objektu pro nějakou jinou třídu a nechám třídu přímo pomocí závislosti nazvat Dependency Injection. Zahrnuje hlavně tři třídy:

  • Třída klienta: Toto je závislá třída a je závislá na třídě Service.

  • Třída služby: Tato třída poskytuje službu klientské třídě.

  • Třída injektoru: Tato třída je zodpovědná za vložení objektu třídy služby do třídy klienta

Nyní, když jste pochopili, co je Dependency Injection, dovolte mi, abych vás dále provedl principem, na kterém je Dependency Injection založen.

Inverze kontroly

Jak jsem zmínil výše, Inverze ovládání je princip, na jehož základě se provádí Dependency Injection. Jak již název napovídá, inverze kontroly se v zásadě používá k obrácení různých druhů dalších povinností třídy, spíše než k hlavní odpovědnosti.

Pokud vám musím vysvětlit jednodušší pojmy, zvažte příklad, ve kterém máte schopnost vařit. Podle principu IoC můžete ovládání obrátit, takže místo vaření potravin můžete objednávat přímo z venku, kde jídlo dostáváte na dosah ruky. Proces jídla dodávaného k vašim dveřím se tedy nazývá obrácení kontroly.

Nemusíte se vařit sami, místo toho si můžete jídlo objednat a nechat si poradce, aby vám jídlo doručil. Tímto způsobem se nemusíte starat o další povinnosti a soustředit se pouze na hlavní práci.

Nyní, když znáte princip za Dependency Injection, dovolte mi, abych vás provedl jednotlivými typy Dependency Injection.

Typy injekcí závislostí

Existují hlavně tři typy Dependency Injection:

  • Vstřikování konstruktoru: V tomto typu injekce injektor dodává závislost prostřednictvím konstruktoru třídy klienta.

  • Nastavovač vstřikování / vstřikování vlastností: V tomto typu injekce injektorová metoda injektuje závislost na metodě setteru vystavené klientem.

  • Injekce rozhraní: V tomto typu injekce injektor používá rozhraní k zajištění závislosti na třídě klienta. Klienti musí implementovat rozhraní, které vystaví ametoda setterukterýpřijímá závislost.

Až dosud doufám, že jste pochopili skutečnost, že Dependency Injection je zodpovědný za vytváření objektů, pochopení toho, které třídy tyto objekty vyžadují, a nakonec tyto třídy s objekty poskytnete. V této poznámce se tedy podívejme na výhody Dependency Injection.

Výhody injekce závislostí

Než uvedu výhody aplikace Dependency Injection, vysvětlím vám potřebu této injekce na průmyslové úrovni, abychom vám lépe porozuměli výhodám.

Zvažte scénář, ve kterém máte třídu e-mailů, jejichž jedinou odpovědností je postarat se o přijaté e-maily. Nyní bude tato třída obsahovat objekty jako „Na e-mailovou adresu“, „Z e-mailové adresy“, „Předmět a tělo e-mailu“.

Pokud chce nyní společnost ukládat textové a zvukové zprávy, myslíte si, že tato třída může zprávu uložit?

Odpověď je ne?

Je to proto, že e-mailová třída nedokáže zpracovat parametry textových a zvukových zpráv. V takových případech budete muset třídu znovu vytvořit. Nyní je opětovné vytvoření třídy docela těžkopádná práce, zvláště pokud ji musíte pravidelně dělat. Místo toho, pokud používáte Dependency Injection, můžete objekty měnit za běhu. Tímto způsobem tedy nemusíte znovu vytvářet třídu, která vám v mnoha ohledech dále pomůže.

Pokud tedy musím shrnout výhody injekce závislostí, pak jsou výhody následující:

Dobře, takže teď, když znáte výhody Dependency Injection, pojďme se posunout vpřed a uvidíme, jak implementovat Dependency Injection pomocí Spring Boot.

Jak implementovat DI pomocí Spring Boot?

Krok 1: Otevři tvůj Zatmění IDE a vytvořte Spring Boot aplikace kliknutím pravým tlačítkem a výběrem Projekt jarního startéru . Poté uveďte název projektu a klikněte na Dokončit .

Chcete-li získat projekt Spring Starter Project, musíte si nainstalovat Spring Tool Suite z Eclipse Marketplace. V případě, že nemáte nainstalovanou Spring Too Suite, můžete se podívat na můj článek na .

Automaticky uvidíte, že je vytvořen soubor aplikace, jak je uvedeno níže.

fibonacci c ++ rekurzivní

Krok 2: Dále vytvořte třídu ve stejném balíčku. Klikněte pravým tlačítkem na soubor -> vyberte Třída a zmínit jméno třídy. Poté klikněte na Dokončit . Tím se vytvoří Třída soubor. Tady jsem vytvořil třídu Zákazníci. Viz níže.

Krok 3: Poté vložme do třídy nějaké vlastnosti. Řekněme tedy, že zahrneme ID zákazníka, jméno zákazníka a Název kurzu. Níže uveďte kód.

balíček com.example.demo // název balíčku veřejná třída Zákazníci {private int custid private String custname private String coursename}

Krok 3.1: Jakmile s tím skončíte, musíte generovat metody Getter a Setter pro tyto vlastnosti. Chcete-li to provést, vyberte tyto vlastnosti a klikněte pravým tlačítkem. Pak vyberte Zdroj -> Generujte metody Getter a Setter.

Váš kód by dosud měl být následující:

balíček com.example.demo veřejná třída 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}}

Nyní zvažte scénář, kdy musíte vytvořit objekt pro zákazníky a nechcete to dělat ručně. V takovém scénáři pak budete muset použít Dependency Injection, abyste získali objekty, kdykoli to budete potřebovat.

Nyní se tedy podívejme, jak toho můžeme dosáhnout.

Krok 4: Nejprve změňte spustit linku v soubor třídy aplikace na následující:

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

Poznámka: Pokud se zobrazí chyba, importujte následující:

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

Tento výše uvedený řádek kódu vrátí objekt v době provedení. Nyní přidejte následující kód do souboru aplikace.

customers c = context.getBean (customers.class)

Výše uvedený řádek řekne kompilátoru, aby vrátil objekt třídy zákazníka. Viz níže.

Krok 4.1: Nyní, abyste zkontrolovali, zda funguje, nebo ne, vy se může vrátit do třídy Zákazník a přidejte metodu následujícím způsobem:

public void display () {System.out.println ('Object Returned Successfully')}

Tato metoda při úspěšném provedení zobrazí výstup „Objekt vrácen úspěšně“.

Krok 4.2: Dále se musíte vrátit k souboru aplikace a zmínit následující:

c. displej ()

Prostřednictvím toho voláte objekt třídy Customers s odkazem na metodu zobrazení. Kód třídy aplikace až dosud najdete na následujícím obrázku:

Nyní, pokud provedete projekt, uvidíte s výjimkou č. kvalifikační fazole typu . Je to proto, že třída zákazníků, kterou jste definovali, není Spring Bean, tj. Není Spring Object. Viz níže.

Krok 4.3: Abychom to jarnímu kontejneru řekli, potřebujeme objekt třídy zákazníka. K tomu je třeba zmínit @ Anotace komponenty ve třídě Zákazník. Kód ve třídě Zákazníci by měl být uveden níže:

balíček com.example.demo import org.springframework.stereotype.Component @Component public class Customers {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 se vrátil úspěšně')}}

Pak, když zmíníte zákazníky c = context.getBean (customers.class) kompilátor zkontroluje, zda je v kontejneru k dispozici fazole zákazníka, nebo ne.

Pokud je Bean k dispozici, pak Spring framework vkládá objekt zákazníka do vaší aplikace. V zásadě je tedy tento objekt vytvořen jarním frameworkem, který lze dále použít v aplikaci.

Takže pokud nyní provedu tento projekt, uvidíte výstup, který se objekt úspěšně vrátil. Viz níže.

Takto můžete implementovat Dependency Injection.

Příklad: Vkládání závislostí pomocí poznámky s automatickým připojením

Doufám, že jste pochopili, jak Dependency Injection funguje ve Spring Boot. Nyní rozšířme tento příklad a dále uvidíme, jak třída závislá na druhé třídě použila funkce této třídy v Spring Boot.

Krok 1: Vytvoř nový soubor třídy znovu kliknutím pravým tlačítkem na balíček a výběrem Nové -> Třída. Nyní uveďte název třídy, jak je uvedeno níže, a klikněte na Dokončit.

Krok 2: Dále pojďme uvést některé vlastnosti třídy. Řekněme tedy, že zahrneme TechID, Techname. Níže uveďte kód.

balíček com.example.demo veřejná třída Technologie {private int techid private String techname}

Krok 2.1: Jakmile to uděláte, generujte Metody Getter a Setter pro tyto vlastnosti klikněte pravým tlačítkem na soubor a poté vyberte Zdroj -> Generovat metody Getter a Setter.

Krok 3: Nyní řekněme, že musíme vytvořit metodu, která vytiskne „ Úspěšný '. Chcete-li to zmínit kód:

public void tech () {System.out.println ('Successful')}

Váš kód by dosud měl vypadat níže:

balíček com.example.demo veřejná třída Technologie {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 (String techname) {this.techname = techname} public void tech () {System.out.println ('Successful')}}

Krok 4: Nyní zavolat tech () metoda v třída zákazníků , musíte vytvořit objekt třídy technologií. Takže ve třídě zákazníků uveďte následující řádek kódu:

soukromý Technologies techdetail

Krok 4.1: Jakmile to uděláte, generujte Metody Getter a Setter pro tyto vlastnosti pravým tlačítkem myši na soubor a poté vyberte Zdroj -> Generovat metody Getter a Setter.

Krok 5: Dále použijte tech () metoda , musíte zmínit techdetail.tech () pod způsob zobrazení třídy zákazníků . Také se ujistěte, že je uveden objekt techdetail @ Anotace komponenty je Třída technologií. Viz níže.

def __init __ (vlastní)

Nyní, když provedete tento projekt, uvidíte a Výjimka nulového ukazatele . Je to proto, že nyní Třída zákazníků je závislá na třídě Technologies, a přesto neví, že existuje třída Technologies .

Abyste zákazníkovi umožnili rozpoznat třídu Technologies, musíte vložit @Autowired anotace ve třídě Zákazníci. Váš konečný kód třídy zákazníků by měl být následující:

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 vrácen úspěšně“) techdetail.tech ()}}

Jakmile tyto soubory spustíte, uvidíte výstupy jako Object Returned Successfully and Su successful, což znamená, že naše závislost tříd byla splněna. Viz níže.

Nyní, když jste s článkem hotovi, se podívejte na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů po celém světě.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů v tomto článku „Co je to Dependency Injection? “Článek a my se vám ozveme co nejdříve.