Wat is afhankelijkheidsinjectie? - Weet hoe u afhankelijkheidsinjectie moet implementeren



Dit artikel over Wat is afhankelijkheidsinjectie is een uitgebreide gids voor afhankelijkheidsinjectie met een hands-on in Spring Boot.

In een wereld waarin we dagelijks met programmeertalen werken, zoeken we allemaal naar methoden en trucs om ons leven gemakkelijk te maken. Dependency Injection is zo'n techniek die de ontwikkelaarscode gemakkelijk wil helpen door afhankelijkheden van een ander object te bieden. In dit artikel over Wat is afhankelijkheidsinjectie, zal ik u helpen deze techniek in detail te begrijpen.

In dit artikel komen de volgende onderwerpen aan bod:





Laten we dus aan de slag gaan met dit artikel.

Wat is afhankelijkheidsinjectie?

Dependency Injection is het vermogen van een object om afhankelijkheden van een ander object te leveren.



Nu ben ik er vrij zeker van dat u misschien niets hebt begrepen door de bovenstaande technische definitie. Dus laat me de verwarring voor je uit de wereld helpen.

Wat komt er in je op als je de term afhankelijkheid hoort?

Het is duidelijk dat iets anders voor ondersteuning afhankelijk is, toch?



Nou, dat is hetzelfde, ook in het geval van programmeren.

Afhankelijkheid bij programmeren is een benadering waarbij een klas specifieke functionaliteiten van een andere klasse gebruikt. Dus als u bijvoorbeeld twee klassen A en B overweegt en zegt dat klasse A functionaliteiten van klasse B gebruikt, dan impliceert dit dat klasse A afhankelijk is van klasse B. Als u nu in Java codeert, moet u dat weten dat moet jemaak een instantie van klasse B voordat de objecten worden gebruikt door klasse A.

Soorten lessen - Wat is afhankelijkheidsinjectie - Edureka

Dus als ik nu Dependency Injection voor je moet definiëren, dan wordt het proces van het maken van een object voor een andere klasse en laat de klasse direct de afhankelijkheid gebruiken Dependency Injection genoemd. Het heeft voornamelijk drie betrokken klassen:

  • Cliënt Klasse: Dit is de afhankelijke klasse en is afhankelijk van de serviceklasse.

  • Serviceklasse: Deze klasse biedt een dienst aan de cliëntklasse.

  • Injector Klasse: Deze klasse is verantwoordelijk voor het injecteren van het serviceklasseobject in de clientklasse

Nu je hebt begrepen wat Dependency Injection is, wil ik je nu het principe laten zien waarop Dependency Injection is gebaseerd.

Omkering van controle

Zoals ik hierboven heb vermeld, is Inversion of Control een principe waarop, Dependency Injection wordt gemaakt. Zoals de naam suggereert, wordt Inversion of Control in feite gebruikt om verschillende soorten aanvullende verantwoordelijkheden van een klasse om te keren in plaats van de hoofdverantwoordelijkheid.

Als ik je in eenvoudiger bewoordingen moet uitleggen, overweeg dan eens een voorbeeld waarin je kunt koken. Volgens het IoC-principe kun je de bediening omkeren, dus in plaats van dat je eten kookt, kun je gewoon direct van buitenaf bestellen, waarbij je eten voor de deur krijgt. Dus het proces van voedsel dat bij je voor de deur wordt afgeleverd, wordt de Inversion of Control genoemd.

U hoeft niet zelf te koken, maar u kunt het eten bestellen en een bezorger het eten voor u laten bezorgen. Op deze manier hoeft u niet voor de extra verantwoordelijkheden te zorgen en u alleen te concentreren op het hoofdwerk.

Nu u het principe achter Dependency Injection kent, laat me u de soorten Dependency Injection doornemen.

Soorten afhankelijkheidsinjectie

Er zijn hoofdzakelijk drie soorten afhankelijkheidsinjectie:

  • Constructor injectie: Bij dit type injectie levert de injector afhankelijkheid via de constructor van de clientklasse.

  • Setterinjectie / eigendomsinjectie: Bij dit type injectie injecteert de injector-methode de afhankelijkheid van de setter-methode die door de klant wordt blootgesteld.

  • Interface-injectie: Bij dit type injectie gebruikt de injector interface om afhankelijkheid te bieden aan de clientklasse. De clients moeten een interface implementeren die eensetter methodewelkeaccepteert de afhankelijkheid.

Ik hoop dat je tot nu toe hebt begrepen dat Dependency Injection verantwoordelijk is voor het maken van objecten, begrijpt voor welke klassen die objecten nodig zijn en dat je die klassen uiteindelijk van de objecten voorziet. Laten we daarom nu eens kijken naar de voordelen van Dependency Injection.

Voordelen van afhankelijkheidsinjectie

Voordat ik de voordelen van Dependency Injection opsom, wil ik u de noodzaak van deze injectie op brancheniveau uitleggen, zodat u de voordelen beter kunt begrijpen.

Overweeg een scenario waarin u een e-mailklasse heeft, wiens enige verantwoordelijkheid is om voor de ontvangen e-mails te zorgen. Nu heeft deze klasse objecten zoals 'Naar e-mailadres', 'Van e-mailadres', 'Onderwerp en de hoofdtekst van de e-mail'.

Als het bedrijf tekst- en audioberichten wil opslaan, denk je dan dat deze klas het bericht kan opslaan?

Nou, het antwoord is nee?

Dat komt omdat de e-mailklasse de parameters van de tekst en de audioberichten niet aankan. In dergelijke gevallen moet u de klas opnieuw maken. Nu is het opnieuw samenstellen van de klas een behoorlijk omslachtige taak, vooral als je het regelmatig moet doen. Als u Dependency Injection gebruikt, kunt u de objecten tijdens runtime wijzigen. Op deze manier hoeft u de klas dus niet opnieuw te maken, wat u op veel manieren verder helpt.

Dus als ik de voordelen van afhankelijkheidsinjectie moet samenvatten, dan zijn de volgende voordelen:

Oké, dus nu je de voordelen van Dependency Injection kent, kunnen we verder gaan en kijken hoe Dependency Injection geïmplementeerd kan worden met Spring Boot.

Hoe DI te implementeren met Spring Boot?

Stap 1: Open je Eclipse IDE en maak een Spring Boot-applicatie door met de rechtermuisknop te klikken en te kiezen Spring Starter Project . Noem vervolgens de naam van het project en klik op Af hebben .

Om het Spring Starter Project te krijgen, moet u Spring Tool Suite installeren vanaf de Eclipse Marketplace. Als je Spring Too Suite niet hebt geïnstalleerd, kun je mijn artikel raadplegen op .

U zult automatisch zien dat er een aanvraagdossier wordt aangemaakt zoals hieronder.

Stap 2: Maak vervolgens een klasse in hetzelfde pakket. Klik hiervoor met de rechtermuisknop op het bestand -> kies Klasse en noem de naam van de klasse. Klik dan op Af hebben . Dit zal een Klasse het dossier. Hier heb ik een klantenklas gemaakt. Zie hieronder.

hoe u een Java-programma afsluit

Stap 3: Laten we daarna wat eigendommen voor de klas toevoegen. Dus, laten we zeggen, we nemen op Klant-ID, klantnaam en Cursus naam. Noem de onderstaande code.

pakket com.example.demo // pakketnaam openbare klasse Klanten {private int custid private String custname private String coursename}

Stap 3.1: Als je daarmee klaar bent, moet je Genereer Getter- en Setter-methoden voor deze eigenschappen. Selecteer hiervoor deze eigenschappen en klik met de rechtermuisknop. Kies dan Bron -> Genereer de methoden Getter en Setter.

Uw code tot nu toe zou als volgt moeten zijn:

pakket com.example.demo public class Klanten {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}}

Overweeg nu een scenario waarin u een object voor klanten moet maken en u dit niet handmatig wilt doen. In een dergelijk scenario moet u Dependency Injection gebruiken om de objecten op elk gewenst moment te krijgen.

Dus laten we nu kijken hoe we hetzelfde kunnen bereiken.

Stap 4: Wijzig eerst het run lijn in de toepassingsklasse-bestand Naar het volgende:

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

Opmerking: als u een foutmelding krijgt, importeert u het volgende:

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

Deze bovenstaande regel code zal een object retourneren op het moment van uitvoering. Voeg nu de volgende code toe aan het aanvraagbestand.

klanten c = context.getBean (klanten.klasse)

De bovenstaande regel zal de compiler vertellen om een ​​object van de klantklasse te retourneren. Zie hieronder.

Stap 4.1: Nu, om te controleren of het werkt of niet, jij kan teruggaan naar de Customer class en voeg als volgt een methode toe:

public void display () {System.out.println ('Object succesvol geretourneerd')}

Deze methode zal een uitvoer weergeven 'Object succesvol geretourneerd' bij succesvolle uitvoering.

Stap 4.2: Vervolgens moet u teruggaan naar het aanvraagdossier en het volgende vermelden:

c.display ()

Hierdoor roept u het object van de klasse Klanten op met een verwijzing naar de weergavemethode. Raadpleeg de onderstaande afbeelding voor de code van de toepassingsklasse tot nu toe:

Als u het project nu uitvoert, ziet u een uitzondering van Geen kwalificerende boon van het type . Dit komt doordat de klantklasse die u hebt gedefinieerd, geen Spring Bean is, d.w.z. geen Spring Object. Zie hieronder.

Stap 4.3: Dus om de Spring Container dat te vertellen, hebben we een object van de klantklasse nodig. Om dat te doen, moet u de @Component annotatie , in de klasse Klant. De code in de klasse Klanten moet er als volgt uitzien:

pakket com.example.demo import org.springframework.stereotype.Component @Component public class Klanten {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 ('Object succesvol geretourneerd')}}

Als u dan klanten noemt c = context.getBean (klanten.klasse) de samensteller controleert of er een klantboon in de container zit of niet.

Als de Bean beschikbaar is, injecteert het Spring-raamwerk het klantobject in uw applicatie. Dit object wordt dus in feite gemaakt door het Spring-framework, dat verder in de applicatie kan worden gebruikt.

Dus als ik dit project nu uitvoer, zie je een uitvoer die Object succesvol is geretourneerd. Zie hieronder.

Dit is in feite hoe u Dependency Injection kunt implementeren.

Voorbeeld: afhankelijkheidsinjectie met automatische annotatie

Ik hoop dat je hebt begrepen hoe Dependency Injection werkt in Spring Boot. Laten we nu dit voorbeeld uitbreiden en verder kijken hoe een klasse die afhankelijk is van de andere klasse, de functionaliteiten van die klasse in Spring Boot gebruikte.

Stap 1: Maak een nieuw class-bestand , door opnieuw rechtsklikken op het pakket en door te kiezen Nieuw -> Klasse. Noem nu de naam van de klas zoals hieronder en klik op Af hebben.

Stap 2: Laten we vervolgens enkele eigenschappen voor de klas invoeren. Dus, laten we zeggen, we nemen op TechID, Techname. Noem de onderstaande code.

pakket com.example.demo public class Technologies {private int techid private String techname}

Stap 2.1: Als u daarmee klaar bent, genereert u Getter- en Setter-methoden voor deze eigenschappen door met de rechtermuisknop op het bestand te klikken en vervolgens te kiezen Bron -> Genereer Getter- en Setter-methoden.

Stap 3: Laten we nu zeggen dat we een methode moeten maken die ' Geslaagd “. Vermeld hiervoor de code:

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

Uw code tot nu toe zou er als volgt uit moeten zien:

pakket 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 (String techname) {this.techname = techname} public void tech () {System.out.println ('Succesvol')}}

Stap 4: Nu, om het tech () methode in de klanten klasse , moet je een object van de klasse technologies maken. Noem dus de volgende regel code in de klantenklasse:

private Technologies techdetail

Stap 4.1: Als u daarmee klaar bent, genereert u Getter- en Setter-methoden voor deze eigendommen door rechtsklikken op het bestand en kies dan Bron -> Genereer Getter- en Setter-methoden.

Stap 5: Gebruik vervolgens de tech () methode , je moet vermelden techdetail.tech () onder de weergavemethode van de klantenklasse . Ook om ervoor te zorgen dat het techdetail-object een instantievermelding is @Component annotatie is de Technologieën klasse. Zie hieronder.

Nu, wanneer u dit project uitvoert, ziet u een Null Pointer Uitzondering . Dit komt omdat nu de De klasse van de klant is afhankelijk van de klasse Technologieën, maar kent het bestaan ​​van de klasse Technologieën niet .

Om de Klant in staat te stellen de klasse Technologies te herkennen, moet u de @Autowired annotatie in de klasse Klanten. Uw definitieve code van de klantenklasse zou als volgt moeten zijn:

pakket com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component public class Klanten {private int custid private String custname private String coursename @Autowired private Technologieën techdetail public Technologieën 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 ( 'Object succesvol geretourneerd') techdetail.tech ()}}

Zodra u deze bestanden uitvoert, ziet u de uitvoer als Object succesvol en succesvol geretourneerd, wat inhoudt dat aan onze afhankelijkheid van de klassen is voldaan. Zie hieronder.

Nu u klaar bent met het artikel, kunt u het door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 250.000 tevreden leerlingen verspreid over de hele wereld.

Heeft u een vraag voor ons? Vermeld het alstublieft in het opmerkingengedeelte van deze “Wat is afhankelijkheidsinjectie? ' artikel en we nemen zo snel mogelijk contact met u op.