Pasaulyje, kuriame kasdien dirbame su programavimo kalbomis, visi esame linkę ieškoti būdų ir gudrybių, kad palengvintume savo gyvenimą. Na, priklausomybės injekcija yra viena iš tokių metodų, kurios tikslas yra lengvai padėti kūrėjo kodui, suteikiant kito objekto priklausomybes. Šiame straipsnyje apie tai, kas yra priklausomybės injekcija, aš padėsiu jums išsamiai suprasti šią techniką.
Šiame straipsnyje bus aptariamos šios temos:
- Įvadas į priklausomybės injekciją
- Valdymo inversija
- Priklausomybės injekcijos tipai
- Priklausomybės injekcijos nauda
- Priklausomybės įpurškimas įgyvendinamas naudojant „Spring Boot“
Taigi, pradėkime nuo šio straipsnio.
Kas yra priklausomybės injekcija?
Priklausomybės įpurškimas yra objekto gebėjimas tiekti kito objekto priklausomybes.
Dabar esu tikras, kad pagal pirmiau pateiktą techninį apibrėžimą jūs nieko nesupratote. Taigi, leisk man išaiškinti painiavą.
Kas jums iškyla, kai girdi priklausomybės terminą?
Akivaizdu, kad kažkas remiasi kažkuo kitu, ar ne?
Na, tas pats, kalbant ir apie programavimą.
Priklausomybė programuojant yra metodas, kai klasė naudoja specifines kitos klasės funkcijas. Pavyzdžiui, jei atsižvelgsite į dvi A ir B klases ir sakysite, kad A klasėje naudojamos B klasės funkcijos, tai reiškia, kad A klasė priklauso nuo B klasės. Dabar, jei koduojate „Java“, turite žinoti tu turisukurkite B klasės egzempliorių, kol objektai nebus naudojami A klasei.
Taigi, jei dabar turiu jums apibrėžti priklausomybės injekciją, tada objektas kuriamas kitai klasei ir leidžiama klasei tiesiogiai naudoti priklausomybę, vadinamas priklausomybės injekcija.. Jame daugiausia yra trys užsiėmimai:
Kliento klasė: Tai yra priklausoma klasė ir priklauso nuo „Service“ klasės.
Aptarnavimo klasė: Ši klasė teikia paslaugą klientų klasei.
Purkštukų klasė: Ši klasė yra atsakinga už paslaugų klasės objekto įvedimą į klientų klasę
Dabar, kai supratote, kas yra priklausomybės injekcija, leiskite man toliau jus apžvelgti principu, kuriuo grindžiama priklausomybės injekcija.
Valdymo inversija
Kaip jau minėjau aukščiau, valdymo inversija yra principas, kuriuo remiantis atliekama priklausomybės injekcija. Be to, kaip rodo pavadinimas, „Inversion of Control“ iš esmės naudojama norint pakeisti įvairias papildomas klasės atsakomybes, o ne pagrindinę atsakomybę.
Jei turiu paaiškinti jus paprastesniais žodžiais, apsvarstykite pavyzdį, kuriame jūs galite gaminti maistą. Pagal IoC principą galite valdyti atvirkščiai, todėl vietoj to, kad gamintumėte maistą, galite tiesiog užsisakyti iš lauko, kur maistą gausite prie savo namų slenksčio. Taigi maisto, pristatyto jums prie jūsų namų slenksčio, procesas vadinamas Valdymo inversija.
Jūs neturite gaminti maisto patys, o jūs galite užsisakyti maistą ir leisti pristatymo vadovui pristatyti maistą jums. Tokiu būdu jums nereikia rūpintis papildomomis pareigomis ir tiesiog susitelkti ties pagrindiniu darbu.
Dabar, kai žinote, koks yra priklausomybės injekcijos principas, leiskite jums apžvelgti priklausomybės injekcijos tipus.
Priklausomybės injekcijos tipai
Iš esmės yra trys priklausomybės injekcijos tipai:
Konstruktoriaus įpurškimas: Šio tipo įpurškimo atveju purkštukas tiekia priklausomybę per kliento klasės konstruktorių.
Setterio injekcija / turto injekcija: Šio tipo injekcijose injektoriaus metodas įpurškia priklausomybę nuo kliento veikiamo seterio metodo.
mvc architektūra java su pavyzdžiu
Sąsajos įpurškimas: Šio tipo injekcijose purkštuvas naudoja sąsają, kad užtikrintų priklausomybę nuo kliento klasės. Klientai turi įdiegti sąsają, kuri atskleis aseterio metodaskuripriima priklausomybę.
Iki šiol, tikiuosi, jūs supratote tai, kad priklausomybės injekcija yra atsakinga už objektų kūrimą, supratimą, kurioms klasėms reikalingi tie objektai, ir galiausiai aprūpina tas klases objektais. Taigi, atkreipkime dėmesį į priklausomybės injekcijos privalumus.
Priklausomybės injekcijos nauda
Prieš išvardindamas priklausomybės injekcijos naudą, leiskite man paaiškinti šios injekcijos poreikį pramonės lygiu, kad galėčiau geriau suprasti naudą.
Apsvarstykite scenarijų, kai turite el. Pašto klasę, kurios vienintelė atsakomybė yra rūpintis gautais el. Laiškais. Dabar šioje klasėje bus tokie objektai kaip „Į el. Pašto adresą“, „Iš el. Pašto adreso“, „El. Laiško tema ir turinys“.
Dabar, jei įmonė nori išsaugoti tekstinius ir garso pranešimus, ar manote, kad ši klasė gali išsaugoti pranešimą?
kaip konvertuoti dešimtainį į dvejetainį
Na, atsakymas yra neigiamas?
Taip yra todėl, kad el. Pašto klasė negali tvarkyti teksto ir garso pranešimų parametrų. Tokiais atvejais turėsite atkurti klasę. Dabar klasės atkūrimas yra gana sudėtingas darbas, ypač jei tenka reguliariai. Vietoj to, jei naudojate priklausomybės injekciją, galite pakeisti objektus vykdymo metu. Taigi, tokiu būdu neturite atkurti klasės, kuri jums dar labiau padeda.
Taigi, jei turiu apibendrinti priklausomybės injekcijos naudą, tai yra šie privalumai:
Gerai, todėl dabar, kai žinote priklausomybės injekcijos pranašumus, leiskite mums judėti į priekį ir sužinoti, kaip įgyvendinti priklausomybės injekciją naudojant „Spring Boot“.
Kaip įgyvendinti DI naudojant „Spring Boot“?
1 žingsnis: Atidaryk savo Užtemimo IDE ir sukurti a Pavasario įkrovos taikymas spustelėdami dešiniuoju pelės klavišu ir pasirinkdami Pavasario starterio projektas . Tada paminėkite projekto pavadinimą ir spustelėkite Baigti .
Norėdami gauti „Pavasario pradžios“ projektą, turite įdiegti „Spring Tool Suite“ iš „Eclipse Marketplace“. Jei jūsų „Spring Too Suite“ nėra įdiegta, galite perskaityti mano straipsnį .
Automatiškai pamatysite, kad programos failas yra sukurtas taip, kaip nurodyta toliau.
2 žingsnis: Tada sukurkite klasę tame pačiame pakete. Norėdami tai padaryti, dešiniuoju pelės mygtuku spustelėkite failą -> pasirinkite Klasė ir paminėti klasės pavadinimas. Tada spustelėkite Baigti . Tai sukurs Klasė failą. Čia aš sukūriau klientų klasę. Žiūrėkite žemiau.
3 žingsnis: Po to įdėkime keletą klasės savybių. Taigi, sakykime, mes įtraukiame Kliento ID, kliento vardas ir Kurso pavadinimas. Paminėkite žemiau esantį kodą.
paketas com.example.demo // paketo pavadinimas public class Klientai {private int custid private String kliento vardas private String Coursename}
3.1 žingsnis: Kai tai padarysite, turite tai padaryti generuoti „Getter“ ir „Setter“ metodus šioms savybėms. Norėdami tai padaryti, pasirinkite šias savybes ir dešiniuoju pelės mygtuku spustelėkite. Tada pasirinkite Šaltinis -> Generuoti „Getter and Setter“ metodus.
Jūsų kodas iki šiol turėtų būti toks:
paketas com.example.demo viešoji klasė Klientai {private int custid private eilutė custname private eilutė 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}}
Dabar apsvarstykite scenarijų, kai turite sukurti objektą klientams ir nenorite to daryti rankiniu būdu. Tokiu atveju turėsite naudoti „Priklausomybės injekciją“, kad gautumėte objektus, kai tik to reikia.
Taigi, toliau pažiūrėkime, kaip galime pasiekti tą patį.
4 žingsnis: Pirmiausia pakeiskite bėgimo linija viduje programos klasės failas prie šių:
ConfigurableApplicationContext context = SpringApplication.run (DemoApplication.class, argumentai)
Pastaba: Jei gausite klaidą, importuokite:
importuoti org.springframework.boot.SpringApplication importuoti org.springframework.boot.autoconfigure.SpringBootApplication importuoti org.springframework.context.ConfigurableApplicationContext
Ši aukščiau nurodyta kodo eilutė grąžins objektą vykdymo metu. Dabar pridėkite šį kodą į programos failą.
klientai c = context.getBean (klientai.klasė)
Pirmiau pateiktoje eilutėje kompiliatorius nurodys grąžinti klientų klasės objektą. Žiūrėkite žemiau.
4.1 žingsnis: Dabar, norėdami patikrinti, ar jis veikia, ar ne gali grįžti į klientų klasę ir pridėkite metodą taip:
public void display () {System.out.println ('Objektas sėkmingai grąžintas')}
Šis metodas parodys išvestį „Sėkmingai grąžintas objektas“ sėkmingai vykdant.
4.2 žingsnis: Tada turite grįžti į programos failą ir paminėti šiuos dalykus:
c. ekranas ()
Tokiu būdu jūs skambinate į klientų klasės objektą, pateikdami nuorodą į rodymo metodą. Toliau pateiktame paveikslėlyje rasite „Application class“ kodą iki šiol:
Dabar, jei vykdysite projektą, pamatysite išskyrus reikalavimus atitinkantį rūšies pupelę . Taip yra todėl, kad jūsų apibrėžta klientų klasė nėra „Spring Bean“, t. Y. Nėra „Spring Object“. Žiūrėkite žemiau.
4.3 žingsnis: Taigi, norint tai pasakyti „Spring Container“, mums reikia kliento klasės objekto. Norėdami tai padaryti, turite paminėti @Component anotacija , klientų klasėje. Klientų klasės kodas turėtų būti toks:
paketas com.example.demo importuoti org.springframework.stereotype.Component @Component viešoji klasė Klientai {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public eilutė getCustname () {return custname} public void setCustname (String custname) {this.custname = custname} viešoji eilutė getCoursename () {return Coursename} public void setCoursename (String Coursename) {this.coursename = coursename} public void rodyti () {System.out.println ('Objektas sėkmingai grąžintas')}}
Tada, kai užsimenate apie klientus c = context.getBean (klientai.klasė) sudarytojas patikrins, ar talpykloje yra kliento pupelių, ar ne.
Jei „Bean“ yra, „Spring“ sistema įterpia kliento objektą į jūsų programą. Taigi, iš esmės šį objektą sukuria „Spring“ sistema, kurią galima toliau naudoti programoje.
Taigi, jei aš dabar vykdysiu šį projektą, pamatysite išvestį, kurią objektas grąžino sėkmingai. Žiūrėkite žemiau.
Iš esmės taip galite įgyvendinti priklausomybės injekciją.
Pavyzdys: Priklausomybės injekcija naudojant automatinę anotaciją
Tikiuosi, kad supratote, kaip „Priklausomybės injekcija“ veikia „Spring Boot“. Išplėskime šį pavyzdį ir pažiūrėkime, kaip nuo kitos klasės priklausanti klasė naudojo tos klasės funkcijas „Spring Boot“.
fibonacci rekursija c ++
1 žingsnis: Sukurkite naują klasės byla , dar kartą dešiniuoju pelės mygtuku spustelėkite ant pakuotės ir pasirinkdami Nauja -> klasė. Dabar paminėkite klasės pavadinimą, kaip nurodyta toliau, ir spustelėkite toliau Baigti.
2 žingsnis: Toliau pateikime keletą klasės savybių. Taigi, sakykime, mes įtraukiame TechID, Techname. Paminėkite žemiau esantį kodą.
paketas com.example.demo public class Technologies {private int techid private String techname}
2.1 žingsnis: Baigę tai sugeneruokite „Getter and Setter“ metodai šioms savybėms dešiniuoju pelės mygtuku spustelėkite failą ir pasirinkite Šaltinis -> Generuoti „Getter and Setter“ metodus.
3 žingsnis: Sakykime, turime sukurti metodą, kuris spausdintų „ Sėkmingai “. Norėdami tai padaryti, paminėkite kodą:
public void tech () {System.out.println ('Sėkminga')}
Iki šiol jūsų kodas turėtų atrodyti taip:
paketas „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 ('Sėkminga')}}
4 žingsnis: Dabar paskambinti tech () metodas viduje klientų klasė , turite sukurti technologijų klasės objektą. Taigi paminėkite šią kodo eilutę klientų klasėje:
privatus „Technologies“ išsami informacija
4.1 žingsnis: Baigę tai sugeneruokite „Getter and Setter“ metodai už šias savybes iki dešiniuoju pelės mygtuku spustelėkite failą ir tada pasirinkite Šaltinis -> Generuoti „Getter and Setter“ metodus.
5 žingsnis: Tada naudokite tech () metodas , jūs turite paminėti techdetail.tech () pagal klientų klasės rodymo metodas . Be to, norėdami įsitikinti, kad „techdetail“ objektas yra nedelsiant paminėtas @Component anotacija yra Technologijų klasė. Žiūrėkite žemiau.
Dabar, kai vykdysite šį projektą, pamatysite Null pointerio išimtis . Taip yra todėl, kad dabar Klientų klasė priklauso nuo „Technologies“ klasės, tačiau ji nežino apie „Technologies“ klasės egzistavimą .
Taigi, kad klientas galėtų atpažinti „Technologies“ klasę, turite įterpti @Autowired anotacija „Klientų“ klasėje. Jūsų galutinis klientų klasės kodas turėtų būti toks:
paketas com.example.demo importuoti org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component viešosios klasės klientai {private int custid private eilutės kliento vardas privatus eilutės kurso pavadinimas @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 ( „Objektas sėkmingai grąžintas“) techdetail.tech ()}}
Vykdę šiuos failus, matysite, kad objektas sėkmingai ir sėkmingai grąžintas, o tai reiškia, kad mūsų klasių priklausomybė buvo įvykdyta. Žiūrėkite žemiau.
Dabar, kai baigsite straipsnį, patikrinkite sukūrė patikima internetinė mokymosi įmonė „Edureka“, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą visame pasaulyje.
Turite mums klausimą? Prašau paminėti tai komentarų skyriuje „Kas yra priklausomybės injekcija? ' straipsnis ir mes kuo greičiau susisieksime su jumis.