U svijetu u kojem svakodnevno radimo s programskim jezicima, svi smo skloni tražiti metode i trikove koji će nam olakšati život. Pa, ubrizgavanje ovisnosti jedna je od takvih tehnika koja ima za cilj pomoći programeru lako pružajući ovisnosti drugog objekta. U ovom članku o tome što je injekcija ovisnosti, pomoći ću vam detaljno razumjeti ovu tehniku.
Sljedeće teme bit će obrađene u ovom članku:
- Uvod u injekciju ovisnosti
- Inverzija kontrole
- Vrste ubrizgavanja ovisnosti
- Prednosti ubrizgavanja ovisnosti
- Provedite ubrizgavanje ovisnosti pomoću Spring Boot-a
Pa, krenimo s ovim člankom.
Što je injekcija ovisnosti?
Injekcija ovisnosti je sposobnost objekta da osigura ovisnosti drugog objekta.
Sad sam prilično siguran da možda niste ništa razumjeli prema gornjoj tehničkoj definiciji. Dakle, dopustite da vam razjasnim zbunjenost.
Kad čujete izraz ovisnost, što vam padne na pamet?
Očito je da se nešto oslanja na nešto drugo za podršku, zar ne?
Pa, to je isto, u slučaju programiranja također.
Ovisnost u programiranju pristup je u kojem klasa koristi specifične funkcionalnosti druge klase. Na primjer, ako uzmete u obzir dvije klase A i B i kažete da klasa A koristi funkcionalnosti klase B, onda se podrazumijeva da klasa A ima ovisnost o klasi B. Sada, ako kodirate na Javi, morate znati to, morašstvorite instancu klase B prije nego što objekte koristi klasa A.
Dakle, ako sada moram definirati ubrizgavanje ovisnosti za vas, tada se postupak stvaranja objekta za neku drugu klasu i dopuštanje klasi izravno koristeći ovisnost naziva Dependency Injection. Uključuje uglavnom tri razreda:
Klasa klijenta: Ovo je ovisna klasa i ovisna je o klasi usluge.
Servisna klasa: Ova klasa pruža uslugu klijentskoj klasi.
Klasa mlaznice: Ova je klasa odgovorna za ubrizgavanje objekta klase usluge u klasu klijenta
Sad, kad ste shvatili, što je injekcija ovisnosti, dopustite mi da vas dalje vodim kroz princip na kojem se temelji injekcija ovisnosti.
Inverzija kontrole
Kao što sam gore spomenuo Inverzija kontrole je princip na kojem se vrši injekcija ovisnosti. Također, kao što i samo ime govori, Inverzija kontrole u osnovi se koristi za invertiranje različitih vrsta dodatnih odgovornosti klase, a ne za glavnu odgovornost.
Ako vam moram objasniti jednostavnije riječi, razmotrite primjer u kojem imate sposobnost kuhanja. Prema IoC principu, možete obrnuti kontrolu, pa umjesto da kuhate hranu, možete samo izravno naručiti izvana, pri čemu hranu dobivate na svom pragu. Stoga se proces hrane koja vam se isporučuje na vašem pragu naziva Inverzija kontrole.
Ne morate sami kuhati, već možete naručiti hranu i prepustiti izvršitelju dostave da vam dostavi hranu. Na taj način ne morate voditi brigu o dodatnim odgovornostima i samo se usredotočiti na glavni posao.
Sad, kad znate princip koji stoji iza ubrizgavanja ovisnosti, dopustite mi da vas vodim kroz vrste ubrizgavanja ovisnosti.
Vrste ubrizgavanja ovisnosti
Postoje uglavnom tri vrste ubrizgavanja ovisnosti:
Injektiranje konstruktora: U ovoj vrsti ubrizgavanja, mlaznica osigurava ovisnost putem konstruktora klase klijenta.
Ubrizgavanje setera / ubrizgavanje svojstva: U ovoj vrsti ubrizgavanja, metoda ubrizgavanja ubrizgava ovisnost o metodi postavljanja koju izloži klijent.
Ubrizgavanje sučelja: U ovoj vrsti ubrizgavanja, mlaznica koristi sučelje kako bi osigurala ovisnost o klasi klijenta. Klijenti moraju implementirati sučelje koje će otkriti ametoda postavljačakojiprihvaća ovisnost.
Do sada, nadam se da ste razumjeli činjenicu da je ubrizgavanje ovisnosti odgovorno za stvaranje objekata, razumijevanje kojih klasa zahtijevaju te objekte i konačno pružanje tih klasa objektima. Dakle, na toj noti, pogledajmo dalje u prednosti ubrizgavanja ovisnosti.
Prednosti ubrizgavanja ovisnosti
Prije nego što nabrojim blagodati injekcije ovisnosti, dopustite mi da vam objasnim potrebu za ovom injekcijom na industrijskoj razini kako bih vam pomogao da bolje razumijete blagodati.
Razmotrite scenarij u kojem imate klasu e-pošte, čija je isključiva odgovornost brinuti se o primljenim e-porukama. Sada će ova klasa imati objekte kao što su 'Na e-adresu', 'S adrese e-pošte', 'Predmet i tijelo e-pošte'.
Ako tvrtka želi spremiti tekstualne i zvučne poruke, mislite li da ova klasa može spasiti poruku?
Pa, odgovor je ne?
To je zato što se klasa e-pošte ne može nositi s parametrima teksta i zvučnih poruka. U takvim ćete slučajevima morati ponovno stvoriti razred. Sada je ponovno stvaranje nastave prilično glomazan posao, pogotovo ako ga morate redovito obavljati. Umjesto toga, ako koristite ubrizgavanje ovisnosti, možete mijenjati objekte u vrijeme izvođenja. Dakle, na ovaj način ne morate ponovno stvoriti nastavu koja vam dalje pomaže na puno načina.
Dakle, ako moram sažeti prednosti ubrizgavanja ovisnosti, onda su sljedeće prednosti:
U redu, sad kad znate blagodati ubrizgavanja ovisnosti, idemo naprijed i vidjet ćemo kako implementirati ubrizgavanje ovisnosti pomoću Spring Boot-a.
Kako implementirati DI koristeći Spring Boot?
Korak 1: Otvorite svoj Eclipse IDE i stvoriti a Primjena za proljetno pokretanje desnim klikom i odabirom Proljetni početni projekt . Zatim spomenite naziv projekta i kliknite na Završi .
početak rada s vizualnim studijem
Da biste dobili Spring Starter Project, morate instalirati Spring Tool Suite s Eclipse Marketplace. U slučaju da nemate instaliran Spring Too Suite, možete se pozvati na moj članak o .
Automatski ćete vidjeti da je datoteka aplikacije kreirana kao u nastavku.
Korak 2: Zatim stvorite klasu u istom paketu. Da biste to učinili, kliknite datoteku desnom tipkom miša -> odaberite Razred i spomenuti naziv klase. Zatim kliknite na Završi . Ovo će stvoriti Razred datoteka. Ovdje sam stvorio klasu Kupci. Pogledajte dolje.
Korak 3: Nakon toga stavimo neka svojstva za razred. Dakle, recimo, uključujemo ID kupca, ime kupca i Naziv tečaja. Spomenite donji kod.
paket com.example.demo // naziv paketa javna klasa Kupci {private int custid private String custname private String coursename}
Korak 3.1: Kad završite s tim, morate generirati metode Getter i Setter za ova svojstva. Da biste to učinili, odaberite ova svojstva i pritisnite desni klik. Zatim odaberite Izvor -> Generirajte metode Getter i Setter.
Do sada bi vaš kôd trebao biti sljedeći:
paket com.example.demo javna klasa Kupci {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 } javna nevažeća setCustname (String custname) {this.custname = custname} javna String getCoursename () {return coursename} javna void setCoursename (Stringname course) {this.coursename = coursename}}
Sada razmotrite scenarij u kojem morate stvoriti objekt za kupce, a ne želite to raditi ručno. U takvom scenariju morat ćete upotrijebiti ubrizgavanje ovisnosti kako biste dobili objekte kad god to zatrebate.
Dakle, pogledajmo kako možemo to isto postići.
Korak 4: Prvo promijenite trčana linija u datoteka klase aplikacije na sljedeće:
ConfigurableApplicationContext context = SpringApplication.run (DemoApplication.class, args)
Napomena: Ako dobijete pogrešku, uvezite sljedeće:
import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.context.ConfigurableApplicationContext
Ovaj gornji redak koda vratit će objekt u vrijeme izvršenja. Sada dodajte sljedeći kod u datoteku aplikacije.
kupci c = context.getBean (customers.class)
Gornji redak reći će prevoditelju da vrati objekt klase kupaca. Pogledajte dolje.
Korak 4.1: Sada, da provjerite radi li ili ne, vi mogu se vratiti u klasu Kupac i dodajte metodu kako slijedi:
javni void prikaz () {System.out.println ('Objekt je uspješno vraćen')}
Ova metoda će prikazati izlaz 'Objekt vraćen uspješno' nakon uspješnog izvršavanja.
Korak 4.2: Zatim se morate vratiti na datoteku aplikacije i spomenuti sljedeće:
c.display ()
Kroz ovo pozivate objekt klase Kupci s referencom metode prikaza. Kôd klase Application do sada pogledajte na donjoj slici:
Ako izvršite projekt, vidjet ćete izuzetak Nema kvalificiranog zrna vrste . To je zato što klasa kupaca koju ste definirali nije Spring Bean tj. Nije Spring objekt. Pogledajte dolje.
Korak 4.3: Dakle, da bismo to rekli Spring Containeru, potreban nam je objekt klase kupaca. Da biste to učinili, morate spomenuti Bilješka o komponentama , u klasi Kupac. Kôd u klasi Kupci trebao bi biti sljedeći:
paket com.example.demo import org.springframework.stereotype.Component @Component javna klasa Kupci {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} javni niz getCustname () {return custname} javna praznina setCustname (niz custname) {this.custname = custname} javni niz getCoursename () {return coursename} javna void setCoursename (niz kursa) {this.coursename = coursename} javna praznina display () {System.out.println ('Objekt je uspješno vraćen')}}
Zatim, kad spominjete kupce c = context.getBean (kupci.razred) sastavljač će provjeriti postoji li u spremniku dostupan grah kupca ili ne.
Ako je Bean dostupan, tada Spring Spring ubrizgava korisnički objekt u vašu aplikaciju. Dakle, u osnovi je ovaj objekt stvoren u okviru Spring, koji se može dalje koristiti u aplikaciji.
Dakle, ako sada izvršim ovaj projekt, vidjet ćete izlaz koji je objekt uspješno vraćen. Pogledajte dolje.
To je u osnovi način na koji možete implementirati ubrizgavanje ovisnosti.
Primjer: Ubrizgavanje ovisnosti pomoću automatskog bilježenja
Nadam se da ste razumjeli kako ubrizgavanje ovisnosti djeluje u Spring Boot-u. Sada, proširimo ovaj primjer i dalje ćemo vidjeti kako je klasa ovisna o drugoj klasi koristila funkcionalnosti te klase u Spring Boot-u.
Korak 1: Stvori novo datoteka klase , opet desni klik na paket i po odabiru Novo -> Razred. Sada spomenite naziv razreda kao ispod i kliknite na Završi.
Korak 2: Dalje, stavimo neka svojstva za klasu. Dakle, recimo, uključujemo TechID, Techname. Spomenite donji kod.
paket com.example.demo javna klasa Technologies {private int techid private String techname}
Korak 2.1: Kad završite s tim, generirajte Getter i Setter metode za ta svojstva desnim klikom na datoteku i zatim odaberite Izvor -> Generiraj metode Gettera i Settera.
Korak 3: Sada, recimo, moramo stvoriti metodu koja ispisuje ' Uspješno “. Da biste to učinili, spomenite kod:
javna void tehnologija () {System.out.println ('Uspješno')}
Vaš dosadašnji kôd trebao bi izgledati dolje:
paket com.example.demo javna klasa Technologies {private int techid private String techname public int getTechid () {return techid} javna praznina setTechid (int techid) {this.techid = techid} javni niz getTechname () {return techname} javna praznina setTechname (niz tehničkog imena) {this.techname = techname} javna void tehnologija () {System.out.println ('Uspješno')}}
Korak 4: Sada, da pozovemo tech () metoda u klasa kupaca , morate stvoriti objekt klase tehnologija. Dakle, spomenite sljedeći redak koda u klasi kupaca:
privatni Technologies techdetail
Korak 4.1: Kad završite s tim, generirajte Getter i Setter metode za ova svojstva po desnom tipkom miša kliknite datoteku a zatim odaberite Izvor -> Generiraj metode Gettera i Settera.
Korak 5: Dalje, za korištenje tech () metoda , morate spomenuti techdetail.tech () ispod način prikaza klase kupaca . Također, kako bismo bili sigurni da je objekt tehničke pojedinosti instancirano spomenut Bilješka o komponentama je Razred tehnologija. Pogledajte dolje.
Sada, kada izvršite ovaj projekt, vidjet ćete Iznimka null pokazivača . To je zato što sada Klasa kupaca ovisna je o klasi Technologies, ali ipak ne zna za postojanje klase Technologies .
Dakle, da biste omogućili kupcu da prepozna klasu Technologies, morate umetnuti @Autowired bilješka u klasi Kupci. Vaš konačni kod klase kupaca trebao bi biti sljedeći:
paket com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component javna klasa Kupci {private int custid private String custname private String coursename @Autowired private Technologies techdetail public Technologies getTechdetail ( ) {return techdetail} javna praznina setTechdetail (Technologies techdetail) {this.techdetail = techdetail} public int getCustid () {return custid} javna praznina setCustid (int custid) {this.custid = custid} javni niz getCustname () {return custname } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} javna praznina setCoursename (Stringname course) {this.coursename = coursename} public void display () {System.out.println ( 'Predmet je uspješno vraćen') techdetail.tech ()}}
Jednom kada izvršite ove datoteke, vidjet ćete izlaze kao Objekt vraćen uspješno i uspješno, što znači da je ispunjena naša Ovisnost klasa. Pogledajte dolje.
jenkins vs marioneta vs chef
Sad kad ste završili s člankom, pogledajte Edureka, pouzdane tvrtke za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta.
Imate pitanje za nas? Molimo navedite ga u odjeljku za komentare ovog 'Što je injekcija ovisnosti? ”Članak i javit ćemo vam se u najkraćem mogućem roku.