Kas ir atkarības injekcija? - Zināt, kā īstenot atkarības injekciju



Šis raksts par to, kas ir atkarības injekcija, ir visaptverošs ceļvedis par atkarības injicēšanu ar brīvroku pavasara sāknēšanas laikā.

Pasaulē, kur mēs ikdienā strādājam ar programmēšanas valodām, mums visiem ir tendence meklēt metodes un trikus, lai atvieglotu savu dzīvi. Atkarības injicēšana ir viena no šādām metodēm, kuras mērķis ir viegli palīdzēt izstrādātāja kodam, nodrošinot cita objekta atkarības. Šajā rakstā par atkarības injicēšanu es jums palīdzēšu detalizēti izprast šo tehniku.

Šajā rakstā tiks aplūkotas šādas tēmas:





Sāksim ar šo rakstu.

Kas ir atkarības injekcija?

Atkarības iesmidzināšana ir objekta spēja piegādāt cita objekta atkarības.



Tagad esmu diezgan pārliecināts, ka jūs, iespējams, neko nesapratāt pēc iepriekš minētās tehniskās definīcijas. Tātad, ļaujiet man jums novērst neskaidrības.

Kad jūs dzirdat terminu atkarība, kas jums ienāk prātā?

Protams, kaut kas paļaujas uz kaut ko citu, lai saņemtu atbalstu, vai ne?



Nu, tas pats, arī programmēšanas gadījumā.

Atkarība programmēšanā ir pieeja, kurā klase izmanto citas klases specifiskas funkcijas. Piemēram, ja ņemat vērā divas A un B klases un sakāt, ka A klasē tiek izmantotas B klases funkcijas, tad tas nozīmē, ka A klase ir atkarīga no B klases. Tagad, ja jūs kodējat Java, jums jāzina tas jums ir jādarapirms objektu izmantošanas A klasē izveidojiet B klases instanci.

Nodarbību veidi - kas ir atkarības injekcija - Edureka

Tātad, ja man tagad jums ir jādefinē atkarības injekcija, tad objekta izveides process citai klasei un klases atļaušana tieši, izmantojot atkarību, tiek saukta par atkarības injekciju.. Tajā galvenokārt ir trīs iesaistītās klases:

  • Klientu klase: Šī ir atkarīgā klase un ir atkarīga no pakalpojuma klases.

  • Pakalpojuma klase: Šī klase nodrošina pakalpojumu klientu klasei.

  • Inžektoru klase: Šī klase ir atbildīga par pakalpojuma klases objekta ievadīšanu klientu klasē

Tagad, kad esat sapratis, kas ir atkarības injicēšana, ļaujiet man tālāk iepazīstināt jūs ar principu, uz kura balstās atkarības injekcija.

Vadības inversija

Kā jau minēju iepriekš, vadības inversija ir princips, uz kura pamata tiek veikta atkarības injekcija. Tāpat, kā norāda nosaukums, vadības inversija galvenokārt tiek izmantota, lai mainītu dažāda veida klases papildu pienākumus, nevis galveno atbildību.

Ja man jums jāpaskaidro vienkāršāk, tad apsveriet piemēru, kurā jums ir iespēja gatavot. Saskaņā ar IoC principu jūs varat apgriezt kontroli, tāpēc ēdiena gatavošanas vietā jūs varat tieši pasūtīt no ārpuses, kur jūs saņemat pārtiku pie jūsu sliekšņa. Tādējādi pārtikas procesu, kas jums tiek piegādāts pie jūsu sliekšņa, sauc par vadības inversiju.

Jums nav jāgatavo pats, tā vietā jūs varat pasūtīt ēdienu un ļaut piegādes vadītājam piegādāt ēdienu jums. Tādā veidā jums nav jārūpējas par papildu pienākumiem un jākoncentrējas tikai uz galveno darbu.

Tagad, kad jūs zināt atkarības injicēšanas principu, ļaujiet man iepazīties ar atkarības injekcijas veidiem.

Atkarības injekcijas veidi

Atkarības injekcijas galvenokārt ir trīs veidi:

  • Konstruktora iesmidzināšana: Šāda veida injekcijās inžektors nodrošina atkarību no klienta klases konstruktora.

  • Setter injekcija / īpašuma injekcija: Šāda veida injekcijās injektora metode injicē atkarību no klienta pakļautās setera metodes.

  • Saskarnes iesmidzināšana: Šāda veida injekcijās inžektors izmanto saskarni, lai nodrošinātu atkarību no klienta klases. Klientiem jāievieš saskarne, kas atklāssetera metodekaspieņem atkarību.

Līdz šim es ceru, ka jūs esat sapratuši faktu, ka atkarības injekcija ir atbildīga par objektu izveidošanu, izpratni par to, kuras klases prasa šos objektus, un visbeidzot nodrošiniet šīs klases ar objektiem. Tātad, ievērojot šo piezīmi, nākamreiz aplūkosim atkarības injekcijas priekšrocības.

Atkarības injicēšanas priekšrocības

Pirms es uzskaitīšu atkarības injekcijas priekšrocības, ļaujiet man jums izskaidrot šīs injekcijas nepieciešamību nozares līmenī, lai palīdzētu jums labāk izprast ieguvumus.

Apsveriet scenāriju, kurā jums ir e-pasta klase, kuras vienīgā atbildība ir rūpēties par saņemtajiem e-pastiem. Tagad šai klasei būs tādi objekti kā “Uz e-pasta adresi”, “No e-pasta adreses”, “E-pasta tēma un pamatteksts”.

Tagad, ja uzņēmums vēlas saglabāt teksta un audio ziņojumus, vai jūs domājat, ka šī klase var saglabāt ziņojumu?

Nu, atbilde ir nē?

Tas ir tāpēc, ka e-pasta klase nevar apstrādāt teksta un audio ziņojumu parametrus. Šādos gadījumos jums būs jāatjauno klase. Tagad klases atjaunošana ir diezgan apgrūtinošs darbs, it īpaši, ja jums tas regulāri jādara. Tā vietā, ja izmantojat atkarības injicēšanu, objektus varat mainīt izpildes laikā. Tādējādi šādā veidā jums nav jāatjauno klase, kas jums daudzos veidos palīdz.

Tātad, ja man ir jāapkopo atkarības injekcijas priekšrocības, tad ir šādas priekšrocības:

Labi, tāpēc tagad, kad jūs zināt atkarības injicēšanas priekšrocības, ļaujiet mums virzīties uz priekšu un redzēt, kā ieviest atkarības injekciju, izmantojot pavasara sāknēšanu.

Kā ieviest DI, izmantojot Spring Boot?

1. darbība: Atver savu Aptumsuma IDE un izveidojiet a Pavasara sāknēšanas pieteikums ar peles labo pogu noklikšķinot un izvēloties Pavasara sākuma projekts . Pēc tam miniet projekta nosaukumu un noklikšķiniet uz Pabeigt .

Lai iegūtu pavasara sākuma projektu, no Eclipse Marketplace jāinstalē Spring Tool Suite. Ja jums nav instalēta programma Spring Too Suite, varat atsaukties uz manu rakstu .

Jūs automātiski redzēsiet, ka tiek izveidots lietojumprogrammas fails, kā norādīts zemāk.

2. darbība: Pēc tam izveidojiet klasi tajā pašā paketē. Lai to izdarītu, ar peles labo pogu noklikšķiniet uz faila -> izvēlieties Klase un pieminēt klases nosaukums. Pēc tam noklikšķiniet uz Pabeigt . Tas radīs Klase failu. Šeit esmu izveidojis klientu klasi. Skatiet tālāk.

3. solis: Pēc tam ieliksim dažus klases īpašumus. Tātad, teiksim, mēs iekļaujam Klienta ID, klienta vārds un Kursa nosaukums. Pieminiet zemāk esošo kodu.

pakete com.example.demo // paketes nosaukums public class Klienti {private int custid private String custname private String Coursename}

3.1. Darbība: Kad tas ir paveikts, jums tas jādara ģenerēt Getter un Setter metodes šīm īpašībām. Lai to izdarītu, atlasiet šīs īpašības un noklikšķiniet ar peles labo pogu. Tad izvēlieties Avots -> Ģenerēt Getter un Setter metodes.

Jūsu kodam līdz šim jābūt šādam:

pakete com.example.demo publiskā klase Klienti {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}}

Tagad apsveriet scenāriju, kurā jums ir jāizveido objekts klientiem, un jūs nevēlaties to darīt manuāli. Šādā gadījumā jums būs jāizmanto atkarības injekcija, lai iegūtu objektus ikreiz, kad jums tas nepieciešams.

Tālāk apskatīsim, kā mēs varam sasniegt to pašu.

4. solis: Vispirms mainiet palaist līniju iekš lietojumprogrammas klases fails uz šādu:

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

Piezīme. Ja tiek parādīta kļūda, importējiet:

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

Šī augšējā koda rinda izpildes laikā atgriezīs objektu. Tagad pievienojiet šo kodu lietojumprogrammas failā.

klienti c = context.getBean (customers.class)

Iepriekš minētā rinda liks kompilatoram atgriezt klienta klases objektu. Skatiet tālāk.

4.1. Darbība: Tagad, lai pārbaudītu, vai tas darbojas, vai nē var atgriezties Klientu klasē un pievienojiet metodi šādi:

public void display () {System.out.println ('Objekts veiksmīgi atgriezts')}

Šī metode veiksmīgi izpildot parādīs izvadi “Objekts veiksmīgi atgriezts”.

4.2. Darbība: Pēc tam jums jāatgriežas pie lietojumprogrammas faila un jāpiemin sekojošais:

c. displejs ()

Izmantojot šo, jūs zvanāt uz Klientu klases objektu ar norādi uz attēlošanas metodi. Lietojumprogrammas klases kodu līdz šim skatiet zemāk esošajā attēlā:

Tagad, ja jūs izpildīsit projektu, jūs redzēsiet izņemot kvalificētu tipa pupiņu . Tas ir tāpēc, ka jūsu definētā klientu klase nav pavasara pupiņa, t.i., nav pavasara objekts. Skatiet tālāk.

4.3. Solis: Tātad, lai to pateiktu pavasara konteineram, mums ir nepieciešams klientu klases objekts. Lai to izdarītu, jums jāpiemin @Komponentu anotācija , Klientu klasē. Klientu klases kodam jābūt šādam:

pakete com.example.demo importēt org.springframework.stereotype.Component @Component publiskā klase Klienti {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 ('Objekts veiksmīgi atgriezts')}}

Tad, kad jūs pieminat klientus c = context.getBean (klienti.klase) sastādītājs pārbaudīs, vai konteinerā ir vai nav pieejama klienta pupiņa.

Ja Bean ir pieejams, pavasara ietvars injicē klienta objektu jūsu lietojumprogrammā. Tātad būtībā šo objektu rada Spring framework, kuru var tālāk izmantot aplikācijā.

Tātad, ja es tagad izpildīšu šo projektu, jūs redzēsiet izvadi, kuru objekts veiksmīgi atgrieza. Skatiet tālāk.

Būtībā tas ir veids, kā jūs varat ieviest atkarības injekciju.

Piemērs: atkarības injicēšana, izmantojot automātisko anotāciju

Es ceru, ka jūs esat sapratuši, kā atkarības injekcija darbojas pavasara sāknēšanas laikā. Ļaujiet mums paplašināt šo piemēru un redzēt, kā klase, kas ir atkarīga no citas klases, izmantoja šīs klases funkcijas Spring Boot.

1. darbība: Izveidojiet jaunu klases fails , atkal ar peles labo pogu noklikšķiniet uz iepakojuma un izvēloties Jauns -> klase. Tagad pieminējiet klases nosaukumu, kā norādīts zemāk, un noklikšķiniet uz Pabeigt.

2. darbība: Pēc tam ieliksim dažus klases īpašumus. Tātad, teiksim, mēs iekļaujam TechID, Techname. Pieminiet zemāk esošo kodu.

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

2.1. Darbība: Kad esat to paveicis, ģenerējiet Getter and Setter metodes šīm īpašībām ar peles labo pogu noklikšķiniet uz faila un pēc tam izvēlieties Avots -> Ģenerēt Getter un Setter metodes.

3. solis: Teiksim, mums ir jāizveido metode, kas drukā “ Veiksmīgi “. Lai to izdarītu, pieminējiet kodu:

public void tech () {System.out.println ('Veiksmīgi')}

Jūsu kodam līdz šim jāizskatās šādi:

pakete 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 ('Veiksmīgi')}}

4. solis: Tagad, lai piezvanītu tech () metode iekš klientu klase , jums ir jāizveido tehnoloģiju klases objekts. Tāpēc klientu klasē miniet šādu koda rindu:

privāto tehnoloģiju tehnoloģiju informācija

4.1. Darbība: Kad esat to paveicis, ģenerējiet Getter and Setter metodes par šīm īpašībām līdz ar peles labo pogu noklikšķiniet uz faila un pēc tam izvēlieties Avots -> Ģenerēt Getter un Setter metodes.

kā izmantot pilnvaras java

5. darbība: Tālāk, lai izmantotu tech () metode , jums jāpiemin techdetail.tech () saskaņā klientu klases attēlošanas metode . Turklāt, lai pārliecinātos, ka tehniskās detaļas objekts tiek pieminēts @Komponentu anotācija ir Tehnoloģiju klase. Skatiet tālāk.

Tagad, kad jūs izpildīsit šo projektu, jūs redzēsiet Null rādītāja izņēmums . Tas ir tāpēc, ka tagad Klientu klase ir atkarīga no klases Technologies, taču tā nezina, ka pastāv tehnoloģija .

Tātad, lai klients varētu atpazīt tehnoloģiju klasi, jums jāievieto @Autowired anotācija klasē Klienti. Jūsu galīgajam klientu klases kodam jābūt šādam:

pakete com.example.demo importēt 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 ( 'Objekts veiksmīgi atgriezts') techdetail.tech ()}}

Kad esat izpildījis šos failus, redzēsit, ka objekts ir veiksmīgi un veiksmīgi atgriezts, kas nozīmē, ka mūsu atkarība no klasēm ir izpildīta. Skatiet tālāk.

Tagad, kad esat pabeidzis rakstu, pārbaudiet Autors: Edureka, uzticams tiešsaistes mācību uzņēmums ar vairāk nekā 250 000 apmierinātu izglītojamo tīklu visā pasaulē.

Vai mums ir jautājums? Lūdzu, pieminējiet to komentāru sadaļā šajā sadaļā “Kas ir atkarības injekcija? ”Rakstu un mēs pēc iespējas ātrāk sazināsimies ar jums.