Hva er avhengighetsinjeksjon? - Vite hvordan du implementerer avhengighetsinjeksjon



Denne artikkelen om hva som er avhengighetsinjeksjon er en omfattende guide til avhengighetsinjeksjon med en hands-on i vårstøvel.

I en verden der vi jobber med programmeringsspråk på daglig basis, har vi alle en tendens til å søke etter metoder og triks for å gjøre livet vårt enkelt. Avhengighetsinjeksjon er en slik teknikk som tar sikte på å hjelpe utviklerkoden enkelt ved å tilby avhengigheter av et annet objekt. I denne artikkelen om Hva er avhengighetsinjeksjon, vil jeg hjelpe deg med å forstå denne teknikken i detalj.

Følgende emner vil bli dekket i denne artikkelen:





grunt vs dypt kopi java

Så la oss komme i gang med denne artikkelen.

Hva er avhengighetsinjeksjon?

Avhengighetsinjeksjon er evnen til et objekt til å levere avhengigheter av et annet objekt.



Nå er jeg ganske sikker på at du kanskje ikke har forstått noe av den tekniske definisjonen ovenfor. Så, la meg fjerne forvirringen for deg.

Hva kommer du til å tenke når du hører begrepet avhengighet?

Åpenbart stoler noe på noe annet for støtte, ikke sant?



Vel, det er det samme, når det gjelder programmering også.

Avhengighet i programmering er en tilnærming der en klasse bruker spesifikke funksjoner i en annen klasse. Så hvis du for eksempel vurderer to klasser A og B og sier at klasse A bruker funksjoner i klasse B, er det underforstått at klasse A har en avhengighet av klasse B. Hvis du koder i Java, må du vite det må dulage en forekomst av klasse B før objektene brukes av klasse A.

Typer klasser - Hva er avhengighetsinjeksjon - Edureka

Så hvis jeg nå må definere avhengighetsinjeksjon for deg, kalles prosessen med å lage et objekt for en annen klasse og la klassen direkte ved hjelp av avhengigheten avhengighetsinjeksjon. Det har hovedsakelig tre klasser involvert:

  • Klientklasse: Dette er den avhengige klassen og er avhengig av serviceklassen.

  • Serviceklasse: Denne klassen gir en tjeneste til klientklassen.

  • Injektorklasse: Denne klassen er ansvarlig for å injisere serviceklasseobjektet i klientklassen

Nå som du har forstått, hva er avhengighetsinjeksjon, la meg videre ta deg gjennom prinsippet som avhengighetsinjeksjon er basert på.

Inversjon av kontroll

Som jeg har nevnt ovenfor, er inversjon av kontroll et prinsipp basert på, avhengighetsinjeksjon er laget. Som navnet antyder, brukes Inversjon av kontroll i utgangspunktet til å invertere forskjellige typer tilleggsansvar for en klasse i stedet for hovedansvaret.

Hvis jeg må forklare deg i enklere termer, så vurder et eksempel der du har muligheten til å lage mat. I følge IoC-prinsippet kan du snu kontrollen, så i stedet for å lage mat kan du bare bestille direkte utenfra, hvor du mottar mat rett utenfor døren. Dermed blir prosessen med mat levert til deg rett utenfor døra kalt Inversjon av kontroll.

Du trenger ikke å lage mat selv, i stedet kan du bestille maten og la en leveringssjef, levere maten til deg. På denne måten trenger du ikke å ta vare på tilleggsansvaret og bare fokusere på hovedarbeidet.

Nå som du kjenner prinsippet bak avhengighetsinjeksjon, la meg ta deg gjennom typene avhengighetsinjeksjon.

Typer avhengighetsinjeksjon

Det er hovedsakelig tre typer avhengighetsinjeksjon:

  • Konstruktørinjeksjon: I denne typen injeksjon leverer injektoren avhengighet gjennom klientklassekonstruktøren.

  • Setter Injection / Property Injection: I denne typen injeksjon injiserer injektormetoden avhengigheten av settermetoden eksponert av klienten.

  • Grensesnittinjeksjon: I denne typen injeksjon bruker injektoren Interface for å gi avhengighet til klientklassen. Kundene må implementere et grensesnitt som vil avsløre asetter metodehvilkenaksepterer avhengigheten.

Inntil nå håper jeg du har forstått det faktum at avhengighetsinjeksjon er ansvarlig for å lage objekter, forstå hvilke klasser som krever disse objektene og til slutt gi disse klassene objektene. Så på det notatet, la oss neste se på fordelene med avhengighetsinjeksjon.

Fordeler med avhengighetsinjeksjon

Før jeg oppregner fordelene med Dependency Injection, la meg forklare deg behovet for denne injeksjonen på industrinivå, for å hjelpe deg med å forstå fordelene bedre.

Tenk på et scenario der du har en e-postklasse, hvis eneste ansvar er å ta vare på e-postene du mottok. Nå vil denne klassen ha objekter som 'Til e-postadresse', 'Fra e-postadresse', 'Emne og e-postens kropp'.

Nå, hvis selskapet vil lagre tekst- og lydmeldinger, tror du denne klassen kan lagre meldingen?

Svaret er nei?

Det er fordi e-postklassen ikke kan håndtere parametrene for teksten og lydmeldingene. I slike tilfeller må du gjenskape klassen. Nå er det ganske tungvint å gjenskape klassen, spesielt hvis du trenger det regelmessig. I stedet, hvis du bruker Avhengighetsinjeksjon, kan du endre objektene i løpetid. Så på denne måten trenger du ikke å gjenskape klassen som ytterligere hjelper deg på mange måter.

Så hvis jeg må oppsummere fordelene med avhengighetsinjeksjon, er følgende fordelene:

OK, så nå som du vet fordelene med Dependency Injection, la oss gå videre og se hvordan du implementerer Dependency Injection ved hjelp av Spring Boot.

Hvordan implementere DI ved hjelp av Spring Boot?

Trinn 1: Åpne din Formørkelse IDE og lage en Spring Boot Application ved å høyreklikke og velge Spring Starter Project . Nevn deretter navnet på prosjektet og klikk på Bli ferdig .

hva er en nøkkelfeil i python

For å få Spring Starter Project må du installere Spring Tool Suite fra Eclipse Marketplace. I tilfelle du ikke har Spring Too Suite installert, kan du se artikkelen min på .

Du vil automatisk se at en applikasjonsfil blir opprettet som nedenfor.

Steg 2: Deretter oppretter du en klasse i samme pakke. For å gjøre det høyreklikker du filen -> velger Klasse og nevne klassenavn. Klikk deretter på Bli ferdig . Dette vil skape en Klasse fil. Her har jeg laget en kundeklasse. Se nedenfor.

Trinn 3: Etter det, la oss legge inn noen eiendommer for klassen. Så la oss si, vi inkluderer Kunde-ID, kundenavn og Kursnavn. Nevn koden nedenfor.

pakke com.example.demo // pakke navn offentlig klasse Kunder {private int custid private String custname private String coursename}

Trinn 3.1: Når du er ferdig med det, må du generere Getter og Setter metoder for disse eiendommene. For å gjøre det, velg disse egenskapene og høyreklikk. Velg deretter Kilde -> Generer Getter og Setter metoder.

Koden din til nå skal være som følger:

pakke com.example.demo offentlig klasse Kunder {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}}

Vurder nå et scenario der du må lage et objekt for kunder, og du ikke vil gjøre det manuelt. I et slikt scenario må du bruke Avhengighetsinjeksjon for å hente gjenstandene når du trenger det.

La oss så se på hvordan vi kan oppnå det samme.

Trinn 4: Først endrer du kjøre linje i søknadsklassefil til følgende:

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

Merk: Hvis du får en feil, importerer du følgende:

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

Denne kodelinjen over vil returnere et objekt på tidspunktet for utførelsen. Legg nå til følgende kode i applikasjonsfilen.

kunder c = context.getBean (kunder.klasse)

Linjen ovenfor vil fortelle kompilatoren å returnere et objekt fra kundeklassen. Se nedenfor.

Trinn 4.1: Nå, for å sjekke om det fungerer eller ikke, du kan gå tilbake til kundeklassen og legg til en metode som følger:

offentlig tom visning () {System.out.println ('Objektet returneres vellykket')}

Denne metoden viser utgangen “Object Returned Successfully” etter vellykket utførelse.

Trinn 4.2: Deretter må du gå tilbake til applikasjonsfilen og nevne følgende:

c. visning ()

Gjennom dette ringer du objektet til klassen Kunder med en referanse til visningsmetoden. Se bildet nedenfor for koden til applikasjonsklassen til nå:

Nå, hvis du gjennomfører prosjektet, vil du se en unntak av Ingen kvalifiserende bønner av typen . Dette fordi kundeklassen du har definert ikke er en Spring Bean, dvs. ikke er en Spring Object. Se nedenfor.

Trinn 4.3: Så for å fortelle Spring Container det, trenger vi et objekt fra kundeklassen. For å gjøre det må du nevne @Komponentkommentar , i Kundeklassen. Koden i klassen Kunder skal være som nedenfor:

pakke com.example.demo importerer org.springframework.stereotype.Component @Component public class Kunder {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 ('Objektet returneres vellykket')}}

Så når du nevner kunder c = context.getBean (kunder.klasse) kompilatoren vil sjekke om det er en kundebønne tilgjengelig i containeren eller ikke.

Hvis Bean er tilgjengelig, injiserer Spring-rammeverket kundeobjektet i søknaden din. Så i utgangspunktet er dette objektet opprettet av Spring framework, som kan brukes videre i applikasjonen.

Så hvis jeg utfører dette prosjektet nå, vil du se en utgang som Objektet returnerte vellykket. Se nedenfor.

overføre filer til ec2 windows-forekomst

Dette er i utgangspunktet hvordan du kan implementere Dependency Injection.

Eksempel: Avhengighetsinjeksjon ved hjelp av Autowired-merknad

Jeg håper du har forstått hvordan Dependency Injection fungerer i Spring Boot. La oss nå utvide dette eksemplet og se hvordan en klasse avhengig av den andre klassen brukte funksjonene til den klassen i Spring Boot.

Trinn 1: Lage en ny klassefilen , igjen høyreklikke på pakken og ved å velge Ny -> Klasse. Nevn nå navnet på klassen som nedenfor, og klikk på Bli ferdig.

Steg 2: La oss deretter legge inn noen eiendommer for klassen. Så la oss si, vi inkluderer TechID, teknikk. Nevn koden nedenfor.

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

Trinn 2.1: Når du er ferdig med det, generer Getter og Setter metoder for disse egenskapene ved å høyreklikke på filen og deretter velge Kilde -> Generer Getter- og Setter-metoder.

Trinn 3: La oss si, vi må lage en metode som skriver ut ' Vellykket “. For å gjøre det nevner du koden:

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

Koden din til nå skal se ut som nedenfor:

pakke com.example.demo offentlig klasse 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 ('Successful')}}

Trinn 4: Nå, for å ringe tech () metode i kundeklasse , må du lage et objekt av teknologiklassen. Så nevn følgende kodelinje i kundeklassen:

private Technologies techdetail

Trinn 4.1: Når du er ferdig med det, generer Getter og Setter metoder for disse eiendommene av høyreklikk på filen og velg deretter Kilde -> Generer Getter- og Setter-metoder.

Trinn 5: Deretter, for å bruke tech () metode , må du nevne techdetail.tech () under visningsmetode for kundeklassen . Også for å sikre at techdetail-objektet er øyeblikkelig nevnt @Komponentkommentar er den Teknologiklasse. Se nedenfor.

Nå når du gjennomfører dette prosjektet, vil du se en Null Pointer Unntak . Dette er fordi nå Kundeklasse er avhengig av teknologiklassen, og likevel vet den ikke eksistensen av teknologiklassen .

Så for å gjøre det mulig for kunden å gjenkjenne teknologiklassen, må du sette inn @Autowired kommentar i klassen Kunder. Den endelige koden for kundeklassen skal være som følger:

pakke com.example.demo importer org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component public class Kunder {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 returnerte vellykket') techdetail.tech ()}}

Når du har kjørt disse filene, vil du se utgangene som Objekt returnert vellykket og vellykket, noe som innebærer at vår avhengighet av klassene er oppfylt. Se nedenfor.

Nå som du er ferdig med artikkelen, sjekk ut av Edureka, et pålitelig online læringsfirma med et nettverk med mer enn 250 000 fornøyde elever spredt over hele verden.

Har du spørsmål til oss? Vennligst nevn det i kommentarfeltet i dette “Hva er avhengighetsinjeksjon? ”Artikkel og vi kommer tilbake til deg så snart som mulig.