Ano ang Dependency Powder? - Alamin Kung Paano Magpatupad ng Dependency Injection



Ang artikulong ito sa Ano ang Dependency Injection ay isang komprehensibong gabay sa Dependency Injection na may isang Kamay sa Bukas ng Spring.

Sa isang mundo kung saan nakikipagtulungan kami sa mga wika ng pagprograma sa araw-araw, lahat tayo ay may posibilidad na maghanap ng mga pamamaraan at trick upang gawing madali ang aming buhay. Sa gayon, ang Dependency Injection ay isang naturang pamamaraan na naglalayong tulungan ang developer code nang madali sa pamamagitan ng pagbibigay ng mga dependency ng ibang bagay. Sa artikulong ito sa Ano ang Dependency Injection, tutulungan kita na maunawaan ang diskarteng ito nang detalyado.

Ang mga sumusunod na paksa ay saklaw sa artikulong ito:





Kaya, magsimula tayo sa artikulong ito.

Ano ang Dependency Injection?

Ang dependency na iniksyon ay ang kakayahan ng isang bagay na magbigay ng mga dependency ng ibang bagay.



Ngayon, sigurado ako, baka wala kang naiintindihan sa pamamagitan ng pang-teknikal na kahulugan sa itaas. Kaya, hayaan mong malinis ko ang pagkalito para sa iyo.

Kapag naririnig mo ang katagang dependency, ano ang pumapasok sa iyong isipan?

Malinaw na, isang bagay na umaasa sa ibang bagay para sa suporta di ba?



Sa gayon, pareho iyan, sa kaso ng programa din.

Ang pagtitiwala sa pagprograma ay isang diskarte kung saan gumagamit ang isang klase ng mga tiyak na pagpapaandar ng ibang klase. Kaya, halimbawa, Kung isasaalang-alang mo ang dalawang klase A at B, at sabihin na ang klase A ay gumagamit ng mga pagpapaandar ng klase B, kung gayon ipinahiwatig nito na ang klase A ay may pagtitiwala sa klase B. Ngayon, kung nag-coding ka sa Java dapat mong malaman yan, kailangan molumikha ng isang halimbawa ng klase B bago ang mga bagay ay ginamit ng klase A.

Mga Uri ng Klase - Ano ang Dependency Injection - Edureka

Kaya, kung kailangan kong tukuyin ngayon ang Dependency Injection para sa iyo, kung gayon ang proseso ng paglikha ng isang bagay para sa iba pang klase at hayaan ang klase nang direkta gamit ang pagpapakandili ay tinatawag na Dependency Injection. Pangunahin itong mayroong tatlong mga klase na kasangkot:

  • Klase ng kliyente: Ito ang umaasa na klase at nakasalalay sa klase ng Serbisyo.

  • Class ng Serbisyo: Ang klase na ito ay nagbibigay ng isang serbisyo sa klase ng kliyente.

  • Klase ng Injector: Ang klase na ito ay responsable para sa pag-iniksyon ng object ng klase ng serbisyo sa klase ng kliyente

    mababaw na kopya ng java vs malalim na kopya

Ngayon, na naintindihan mo, ano ang Dependency Injection, hayaan mo akong susunod na dalhin ka sa prinsipyo kung saan nakabatay ang Dependency Injection.

Pagbaligtad ng Pagkontrol

Tulad ng nabanggit ko sa itaas Ang Inversion of Control ay isang prinsipyo batay sa kung saan, Ginawa ang Dependency Injection. Gayundin, tulad ng ipinahihiwatig ng pangalan, ang Inversion of Control ay karaniwang ginagamit upang baligtarin ang iba't ibang mga uri ng mga karagdagang responsibilidad ng isang klase sa halip na ang pangunahing responsibilidad.

Kung kailangan kong ipaliwanag sa iyo sa mas simpleng mga termino, pagkatapos ay isaalang-alang ang isang halimbawa, kung saan mayroon kang kakayahang magluto. Ayon sa prinsipyo ng IoC, maaari mong baligtarin ang kontrol, kaya sa halip na magluto ka ng pagkain, direkta kang makakapag-order mula sa labas, kung saan nakakatanggap ka ng pagkain sa iyong pintuan. Sa gayon ang proseso ng pagkain na naihatid sa iyo sa iyong pintuan ay tinatawag na Inversion of Control.

Hindi mo kailangang lutuin ang iyong sarili, sa halip, maaari kang mag-order ng pagkain at hayaan ang isang executive executive, ihatid ang pagkain para sa iyo. Sa ganitong paraan, hindi mo kailangang pangalagaan ang mga karagdagang responsibilidad at ituon lamang ang pansin sa pangunahing gawain.

Ngayon, na alam mo ang prinsipyo sa likod ng Dependency Injection, hayaan mo akong dalhin ka sa mga uri ng Dependency Injection.

Mga Uri ng Dependency Powder

Pangunahing mayroong tatlong uri ng Dependency Injection:

  • Consuktor Iniksyon: Sa ganitong uri ng iniksyon, ang iniksyon ay naghahatid ng pagtitiwala sa pamamagitan ng tagabuo ng klase ng kliyente.

  • Setter Powder / Iniksyon sa Ari-arian: Sa ganitong uri ng pag-iniksyon, ang paraan ng pag-iikot ay nag-iikot ng pagtitiwala sa setter na pamamaraan na nakalantad ng kliyente.

  • Interface Injeksyon: Sa ganitong uri ng iniksyon, gumagamit ang iniksyon ng Interface upang magbigay ng pagpapakandili sa klase ng kliyente. Dapat magpatupad ang mga kliyente ng isang interface na maglalantad sa aparaan ng setteralintinatanggap ang pagpapakandili.

Hanggang ngayon, inaasahan kong naiintindihan mo ang katotohanan na ang Dependency Injection ay responsable upang lumikha ng mga bagay, maunawaan kung aling mga klase ang nangangailangan ng mga bagay na iyon at sa wakas ay ibigay ang mga klase sa mga bagay. Kaya, sa tala na iyon, susuriin natin sa susunod ang mga pakinabang ng Dependency Injection.

Mga Pakinabang ng Dependency Powder

Bago ko ilista ang mga benepisyo ng Dependency Injection, hayaan mong ipaliwanag ko sa iyo ang pangangailangan para sa iniksyon na ito sa isang antas ng industriya, upang matulungan kang maunawaan nang mabuti ang mga benepisyo.

Isaalang-alang ang isang senaryo, kung saan mayroon kang isang Klase sa Email, na ang tanging responsibilidad ay ang pangalagaan ang mga email na natanggap. Ngayon, ang klase na ito ay magkakaroon ng mga bagay tulad ng 'Upang mag-email address', 'Mula sa email address', 'Paksa at ang Katawan ng email'.

Ngayon, kung nais ng kumpanya na makatipid ng mga text at audio message, sa palagay mo maaaring mai-save ng klase ang mensahe?

Kaya, ang sagot ay hindi?

Iyon ay dahil, hindi mahawakan ng Class ng Email ang mga parameter ng teksto at mga audio message. Sa mga ganitong kaso, muli mong likhain ang klase. Ngayon, ang muling paggawa ng klase ay isang mahirap na trabaho, lalo na kung kailangan mo itong regular. Sa halip, kung gagamit ka ng Dependency Injection, maaari mong baguhin ang mga object sa run-time. Kaya, sa ganitong paraan, hindi mo na kailangang likhain muli ang klase na higit na makakatulong sa iyo sa maraming paraan.

Kaya, Kung kailangan kong buodin ang mga benepisyo ng injection ng Dependency, kung gayon ang mga sumusunod ay ang mga benepisyo:

O sige, kaya't ngayong alam mo na ang mga pakinabang ng Dependency Injection, magpatulong tayo at tingnan kung paano ipatupad ang Dependency Injection gamit ang Spring Boot.

Paano Ipapatupad ang DI gamit ang Spring Boot?

Hakbang 1: Buksan mo ang iyong Eclipse IDE at lumikha ng a Application ng Spring Boot sa pamamagitan ng pag-right click at pagpili Proyekto ng Spring Starter . Pagkatapos ay banggitin ang pangalan ng proyekto at mag-click sa Tapos na .

Upang makuha ang Spring Starter Project, kailangan mong mag-install ng Spring Tool Suite mula sa Eclipse Marketplace. Kung sakali, wala kang naka-install na Spring too Suite, maaari kang mag-refer sa aking artikulo sa .

Awtomatiko mong makikita na ang isang file ng application ay nilikha tulad ng sa ibaba.

Hakbang 2: Susunod, lumikha ng isang klase sa parehong pakete. Upang gawin iyon, i-right click ang file -> pumili Klase at banggitin ang pangalan ng klase. Pagkatapos mag-click sa Tapos na . Lilikha ito ng a Klase file Dito ako lumikha ng isang klase ng Mga Customer. Sumangguni sa ibaba.

Hakbang 3: Pagkatapos nito, maglagay tayo ng ilang mga pag-aari para sa klase. Kaya, sabihin natin, nagsasama kami Customer ID, Pangalan ng customer at Pangalan ng kurso. Nabanggit ang code sa ibaba.

package com.example.demo // package name public class Mga Customer {pribadong int custid pribadong String custname pribadong String coursename}

Hakbang 3.1: Kapag tapos ka na sa ganoon, kailangan mo bumuo ng mga pamamaraan ng Getter at Setter para sa mga katangiang ito. Upang magawa iyon, piliin ang mga katangiang ito at ang tamang pag-click. Pagkatapos pumili Pinagmulan -> Bumuo ng mga pamamaraan ng Getter at Setter.

Ang iyong code hanggang ngayon ay dapat na ang mga sumusunod:

package com.example.demo pampublikong klase Mga Customer {pribadong int custid pribadong String custname pribado 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}}

Ngayon, isaalang-alang ang isang senaryo kung saan kailangan mong lumikha ng isang bagay para sa Mga Customer at hindi mo nais na gawin ito nang manu-mano. Sa nasabing senaryo, kakailanganin mong gumamit ng Dependency Injection, upang makuha ang mga bagay sa tuwing kailangan mo ito.

Kaya, sa susunod tingnan natin kung paano natin makakamit ang pareho.

Hakbang 4: Una, baguhin ang linya ng patakbo nasa file ng klase ng aplikasyon sa mga sumusunod:

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

Tandaan: Kung nakakuha ka ng isang error i-import ang sumusunod:

i-import ang org.springframework.boot.SpringApplication i-import ang org.springframework.boot.autoconfigure.SpringBootApplication i-import org.springframework.context.ConfigurableApplicationContext

Ang linya ng code sa itaas na ito ay magbabalik ng isang bagay sa oras ng pagpapatupad. Idagdag ngayon ang sumusunod na code sa file ng application.

mga customer c = konteksto.getBean (mga customer.class)

Ang linya sa itaas, sasabihin sa tagatala upang ibalik ang isang bagay ng klase ng customer. Sumangguni sa ibaba.

Hakbang 4.1: Ngayon, upang suriin kung gumagana ito o hindi, ikaw maaaring bumalik sa klase ng Customer at magdagdag ng isang pamamaraan tulad ng sumusunod:

public void display () {System.out.println ('Matagumpay na Naibalik ang Bagay')}

Ang pamamaraang ito ay magpapakita ng isang output na 'Matagumpay na Naibalik ang Bagay' sa matagumpay na pagpapatupad.

Hakbang 4.2: Susunod, kailangan mong bumalik sa file ng application at banggitin ang sumusunod:

c. ipakita ()

Sa pamamagitan nito, tinatawagan mo ang bagay ng klase ng Mga Customer na may isang sanggunian ng paraan ng pagpapakita. Sumangguni sa imahe sa ibaba para sa code ng klase ng Application hanggang ngayon:

Ngayon, kung isasagawa mo ang proyekto, makakakita ka ng isang pagbubukod ng Walang kwalipikadong bean ng uri . Ito ay dahil ang klase ng customer na iyong tinukoy ay hindi isang Spring Bean ibig sabihin ay hindi isang Spring Object. Sumangguni sa ibaba.

Hakbang 4.3: Kaya, upang sabihin sa Spring Container na, kailangan namin ng isang object ng Class ng customer. Upang gawin iyon, kailangan mong banggitin ang @Component na anotasyon , sa klase ng Customer. Ang code sa klase ng Mga Customer ay dapat na nasa ibaba:

package com.example.demo import org.springframework.stereotype.Component @Component public class Mga Customer {pribadong int custid pribadong String custname pribado 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 ipakita () {System.out.println ('Matagumpay na Naibalik ang Bagay')}}

Pagkatapos, kapag binanggit mo ang mga customer c = context.getBean (mga customer.class) susuriin ng tagatala kung mayroong isang customer bean na magagamit sa lalagyan o hindi.

Kung ang Bean ay magagamit, kung gayon ang balangkas ng Spring ay nag-iiniksyon ng object ng customer sa iyong aplikasyon. Kaya, karaniwang, ang bagay na ito ay nilikha ng balangkas ng Spring, na maaaring karagdagang magamit sa application.

Kaya, Kung naisakatuparan ko ang proyektong ito ngayon, makakakita ka ng isang output na Matagumpay na Naibalik ang Bagay. Sumangguni sa ibaba.

Ito ay karaniwang kung paano mo maipapatupad ang Dependency Injection.

Halimbawa: Depensyon ng Pag-iniksyon Gamit ang Autowired Annotation

Inaasahan kong naiintindihan mo kung paano gumagana ang Dependency Injection sa Spring Boot. Ngayon, palawakin natin ang halimbawang ito at karagdagang makita kung paano ginamit ng isang klase sa iba pang klase ang mga pagpapaandar ng klase na iyon sa Spring Boot.

Hakbang 1: Gumawa ng bago file ng klase , ng muli pag-right click sa package at ang sa pamamagitan ng pagpili Bago -> Klase. Ngayon, banggitin ang pangalan ng klase sa ibaba at mag-click sa Tapos na.

Hakbang 2: Susunod, maglagay tayo ng ilang mga pag-aari para sa klase. Kaya, sabihin natin, nagsasama kami TechID, Teknolohiya. Nabanggit ang code sa ibaba.

package com.example.demo pampublikong klase Teknolohiya {pribadong int techid pribadong String techname}

Hakbang 2.1: Kapag tapos ka na diyan, makabuo Mga pamamaraan ng Getter at Setter para sa mga katangiang ito sa pamamagitan ng pag-right click sa file at pagkatapos ay pumili Pinagmulan -> Bumuo ng mga pamamaraan ng Getter at Setter.

Hakbang 3: Ngayon, sabihin natin, kailangan nating lumikha ng isang pamamaraan na naglilimbag ng ' Matagumpay '. Upang gawin iyon banggitin ang code:

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

Ang iyong code hanggang ngayon ay dapat magmukhang sa ibaba:

package com.example.demo public class Technologies {pribadong int techid pribadong String techname publiko 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 ('Matagumpay')}}

Hakbang 4: Ngayon, upang tawagan ang pamamaraan ng tech () nasa klase ng mga customer , kailangan mong lumikha ng isang bagay ng klase ng mga teknolohiya. Kaya banggitin ang sumusunod na linya ng code sa klase ng mga customer:

pribadong Teknolohiya techdetail

Hakbang 4.1: Kapag tapos ka na diyan, makabuo Mga pamamaraan ng Getter at Setter para sa mga katangiang ito ng pag-right click sa file at pagkatapos ay pumili Pinagmulan -> Bumuo ng mga pamamaraan ng Getter at Setter.

Hakbang 5: Susunod, upang magamit ang pamamaraan ng tech () , kailangan mong banggitin techdetail.tech () sa ilalim ng display paraan ng klase ng mga customer . Gayundin, upang matiyak na ang bagay na techdetail ay nasimulan ng pagbanggit @Component na anotasyon ay ang Klase ng mga teknolohiya. Sumangguni sa ibaba.

Ngayon, kapag naisagawa mo ang proyektong ito, makakakita ka ng a Null Pointer Exception . Ito ay sapagkat ngayon ang Depende sa klase ng Mga Teknolohiya ang klase ng kostumer ngunit hindi nito alam ang pagkakaroon ng klase ng Mga Teknolohiya .

Kaya, upang paganahin ang Customer sa klase ng mga Teknolohiya, kailangan mong ipasok ang @Autowired anotasyon sa klase ng Mga Customer. Ang iyong huling code ng klase ng mga customer ay dapat na ang mga sumusunod:

package com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component public class Mga Kostumer {pribadong int custid pribadong String custname pribadong 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 ( 'Matagumpay na Naibalik ang Bagay') techdetail.tech ()}}

Kapag naipatupad mo ang mga file na ito, makikita mo ang mga output bilang Matagumpay na Naibalik at Matagumpay ang Bagay, na nagpapahiwatig na ang aming Pag-asa sa mga klase ay natupad. Sumangguni sa ibaba.

Ngayon na tapos ka na sa artikulo, tingnan ang ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online na may isang network na higit sa 250,000 nasiyahan na mga nag-aaral na kumalat sa buong mundo.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento ng 'Ano ang Dependency Injection? ”Artikulo at babalik kami sa iyo sa lalong madaling panahon.