Ce este injecția de dependență? - Știți cum să implementați injecția de dependență



Acest articol despre Ce este injecția de dependență este un ghid cuprinzător pentru injecția de dependență cu un dispozitiv practic în primăvară.

Într-o lume în care lucrăm zilnic cu limbaje de programare, toți avem tendința de a căuta metode și trucuri pentru a ne ușura viața. Ei bine, injecția de dependență este o astfel de tehnică care urmărește să ajute codul dezvoltatorului cu ușurință, oferind dependențe de alt obiect. În acest articol despre Ce este injecția de dependență, vă voi ajuta să înțelegeți în detaliu această tehnică.

Următoarele subiecte vor fi tratate în acest articol:





Deci, să începem cu acest articol.

Ce este injecția de dependență?

Injecția de dependență este capacitatea unui obiect de a furniza dependențele unui alt obiect.



Acum, sunt destul de sigur, este posibil să nu fi înțeles nimic prin definiția tehnică de mai sus. Deci, permiteți-mi să vă clarific confuzia.

Când auziți termenul de dependență, ce vă vine în minte?

Evident, ceva care se bazează pe altceva pentru sprijin nu?



Ei bine, același lucru este și în cazul programării.

Dependența în programare este o abordare în care o clasă folosește funcționalități specifice unei alte clase. De exemplu, dacă luați în considerare două clase A și B și spuneți că clasa A folosește funcționalități din clasa B, atunci se presupune că clasa A are o dependență de clasa B. Acum, dacă codificați în Java, atunci trebuie să știți asta, trebuiecreați o instanță din clasa B înainte ca obiectele să fie utilizate de clasa A.

Tipuri de clase - Ce este injecția de dependență - Edureka

Deci, dacă trebuie să vă definesc acum injecția de dependență, atunci procesul de creare a unui obiect pentru o altă clasă și lăsarea clasei folosind direct dependența se numește injecție de dependență. Are în principal trei clase implicate:

  • Clasa clientului: Aceasta este clasa dependentă și este dependentă de clasa Service.

  • Clasa de service: Această clasă oferă un serviciu clasei client.

  • Clasa injectoare: Această clasă este responsabilă pentru injectarea obiectului clasei de servicii în clasa client

Acum, după ce ați înțeles, ce este injecția de dependență, permiteți-mi să vă duc mai departe prin principiul pe care se bazează injecția de dependență.

Inversarea controlului

După cum am menționat mai sus, Inversiunea controlului este un principiu pe baza căruia se face injecția de dependență. De asemenea, așa cum sugerează și numele, Inversiunea controlului este practic utilizată pentru a inversa diferite tipuri de responsabilități suplimentare ale unei clase, mai degrabă decât responsabilitatea principală.

Dacă trebuie să vă explic în termeni mai simpli, atunci luați în considerare un exemplu în care aveți capacitatea de a găti. Conform principiului IoC, puteți inversa controlul, astfel încât, în loc să gătiți alimente, puteți comanda direct din exterior, în care primiți alimente la ușa dumneavoastră. Astfel, procesul de hrană livrat ție la ușa ta se numește inversiunea controlului.

Nu trebuie să vă gătiți, în schimb, puteți comanda mâncarea și lăsați un executiv de livrare să vă livreze mâncarea. În acest fel, nu trebuie să vă ocupați de responsabilitățile suplimentare și să vă concentrați doar pe lucrarea principală.

Acum, că știți principiul din spatele injecției de dependență, permiteți-mi să vă prezint tipurile de injecție de dependență.

Tipuri de injecție de dependență

Există în principal trei tipuri de injecție de dependență:

cum se termină programul Java
  • Injecție constructor: În acest tip de injecție, injectorul furnizează dependență prin constructorul clasei client.

  • Injecție Setter / Injecție de proprietate: În acest tip de injecție, metoda injector injectează dependența de metoda setter expusă de client.

  • Injecție interfață: În acest tip de injecție, injectorul folosește interfața pentru a oferi dependență clasei client. Clienții trebuie să implementeze o interfață care va expune unmetoda settercareacceptă dependența.

Până acum, sper că ați înțeles faptul că injecția de dependență este responsabilă pentru a crea obiecte, pentru a înțelege ce clase necesită acele obiecte și, în cele din urmă, pentru a furniza acele clase cu obiectele. Deci, pe această notă, să analizăm în continuare beneficiile injecției de dependență.

Avantajele injecției de dependență

Înainte de a enumera beneficiile injecției de dependență, permiteți-mi să vă explic necesitatea acestei injecții la nivel de industrie, pentru a vă ajuta să înțelegeți mai bine beneficiile.

Luați în considerare un scenariu în care aveți o clasă de e-mail, a cărei responsabilitate exclusivă este de a avea grijă de e-mailurile primite. Acum, această clasă va avea obiecte precum „La adresa de e-mail”, „De la adresa de e-mail”, „Subiectul și corpul e-mailului”.

Acum, dacă compania dorește să salveze mesaje text și audio, credeți că această clasă poate salva mesajul?

Ei bine, răspunsul este nu?

Acest lucru se datorează faptului că clasa de e-mail nu poate gestiona parametrii textului și ai mesajelor audio. În astfel de cazuri, va trebui să recreați clasa. Acum, recrearea clasei este o treabă destul de greoaie, mai ales dacă trebuie să o faci în mod regulat. În schimb, dacă utilizați injecția de dependență, puteți schimba obiectele în timpul rulării. Deci, în acest fel, nu trebuie să recreați clasa care vă ajută în mai multe moduri.

Deci, dacă trebuie să rezum beneficiile injecției de dependență, atunci următoarele sunt beneficiile:

Bine, așa că acum, când știți care sunt avantajele injecției de dependență, permiteți-ne să mergem mai departe și să vedem cum să implementăm injecția de dependență folosind Spring Boot.

Cum se implementează DI folosind Spring Boot?

Pasul 1: Deschideți-vă Eclipse IDE și creați un Aplicația Spring Boot făcând clic dreapta și alegând Spring Starter Project . Apoi menționați numele proiectului și faceți clic pe finalizarea .

Pentru a obține Spring Starter Project, trebuie să instalați Spring Tool Suite de pe Eclipse Marketplace. În cazul în care nu aveți instalat Spring Too Suite, puteți consulta articolul meu de pe .

Veți vedea automat că un fișier de aplicație este creat după cum urmează.

Pasul 2: Apoi, creați o clasă în același pachet. Pentru a face acest lucru, faceți clic dreapta pe fișier -> alegeți Clasă și menționează numele clasei. Apoi faceți clic pe finalizarea . Aceasta va crea un Clasă fişier. Aici am creat o clasă Clienți. Consultați mai jos.

Pasul 3: După aceea, permiteți-ne să introducem câteva proprietăți pentru clasă. Deci, să spunem, includem ID-ul clientului, numele clientului și Numele cursului. Menționează codul de mai jos.

package com.example.demo // numele pachetului public class Clienți {private int custid private String custname private String coursename}

Pasul 3.1: Odată ce ați terminat cu asta, trebuie genera metode Getter și Setter pentru aceste proprietăți. Pentru aceasta, selectați aceste proprietăți și faceți clic dreapta. Atunci alege Sursă -> Generați metode Getter și Setter.

Codul dvs. până acum ar trebui să fie după cum urmează:

package com.example.demo public class Clienți {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}}

Acum, ia în considerare un scenariu în care trebuie să creezi un obiect pentru clienți și nu vrei să îl faci manual. Într-un astfel de scenariu, va trebui apoi să utilizați Dependency Injection, pentru a obține obiectele ori de câte ori aveți nevoie.

Așadar, haideți să analizăm cum putem realiza același lucru.

Pasul 4: Mai întâi, schimbați linie de alergare în fișierul clasei aplicației la următoarele:

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

Notă: Dacă primiți o eroare, importați următoarele:

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

Această linie de cod de mai sus va returna un obiect în momentul executării. Acum adăugați următorul cod în fișierul aplicației.

clienți c = context.getBean (customers.class)

Linia de mai sus va indica compilatorului să returneze un obiect din clasa client. Consultați mai jos.

Pasul 4.1: Acum, pentru a verifica dacă funcționează sau nu, tu poate reveni la clasa Clienți și adăugați o metodă după cum urmează:

public void display () {System.out.println ('Obiect returnat cu succes')}

Această metodă va afișa o ieșire „Obiect returnat cu succes” la executarea cu succes.

Pasul 4.2: Apoi, trebuie să reveniți la fișierul cererii și să menționați următoarele:

c.display ()

Prin aceasta, apelați obiectul clasei Clienți cu o referință a metodei de afișare. Consultați imaginea de mai jos pentru codul clasei de aplicații până acum:

Acum, dacă executați proiectul, veți vedea un cu excepția Fără fasole de tip . Acest lucru se datorează faptului că clasa de clienți pe care ați definit-o nu este Spring Bean, adică nu este un obiect Spring. Consultați mai jos.

Pasul 4.3: Deci, pentru a spune Spring Container că, avem nevoie de un obiect al clasei de clienți. Pentru a face acest lucru, trebuie să menționați Adnotare @Component , în clasa Clienți. Codul din clasa Clienți ar trebui să fie după cum urmează:

package com.example.demo import org.springframework.stereotype.Component @Component public class Clienți {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 ('Obiect returnat cu succes')}}

Apoi, când pomenești de clienți c = context.getBean (customers.class) compilatorul va verifica dacă există un bob de client disponibil în container sau nu.

Dacă Bean este disponibil, atunci framework-ul Spring injectează obiectul client în aplicația dvs. Deci, practic, acest obiect este creat de cadrul Spring, care poate fi utilizat în continuare în aplicație.

Deci, dacă execut acest proiect acum, veți vedea o ieșire pe care obiectul a returnat-o cu succes. Consultați mai jos.

Acesta este practic modul în care puteți implementa injecția de dependență.

Exemplu: injecție de dependență utilizând adnotarea conectată automat

merge sort algoritm c ++

Sper că ați înțeles cum funcționează Dependency Injection în Spring Boot. Acum, să extindem acest exemplu și să vedem în continuare cum o clasă dependentă de cealaltă clasă a folosit funcționalitățile acelei clase în Spring Boot.

Pasul 1: Creaza un nou fișierul clasei , din nou făcând clic dreapta pe pachet iar prin alegere Nou -> Clasa. Acum, menționați numele clasei ca mai jos și faceți clic pe Finalizarea.

Pasul 2: Apoi, să introducem câteva proprietăți pentru clasă. Deci, să spunem, includem TechID, Techname. Menționează codul de mai jos.

package com.example.demo public class Tehnologii {private int techid private String techname}

Pasul 2.1: Odată ce ați terminat cu asta, generați Metode Getter și Setter pentru aceste proprietăți făcând clic dreapta pe fișier și apoi alegeți Sursă -> Generați metode Getter și Setter.

Pasul 3: Acum, să spunem, trebuie să creăm o metodă care imprimă „ De succes „. Pentru aceasta, menționați codul:

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

Codul dvs. până acum ar trebui să arate ca mai jos:

package com.example.demo public class Tehnologii {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 (Strame techname) {this.techname = techname} public void tech () {System.out.println ('Successful')}}

Pasul 4: Acum, pentru a apela la metoda tech () în clasa clienților , trebuie să creați un obiect al clasei de tehnologii. Deci, menționați următoarea linie de cod din clasa clienți:

detalii tehnice private Technologies

Pasul 4.1: Odată ce ați terminat cu asta, generați Metode Getter și Setter pentru aceste proprietăți de făcând clic dreapta pe fișier și apoi alegeți Sursă -> Generați metode Getter și Setter.

Pasul 5: Apoi, pentru a utiliza metoda tech () , trebuie să menționezi techdetail.tech () sub metoda de afișare a clasei de clienți . De asemenea, pentru a vă asigura că obiectul techdetail este menționat instantaneu Adnotare @Component este Clasa de tehnologii. Consultați mai jos.

Acum, când executați acest proiect, veți vedea un Excepția indicatorului nul . Acest lucru se datorează faptului că acum Clasa pentru clienți este dependentă de clasa Tehnologii și totuși nu cunoaște existența clasei Tehnologii .

Deci, pentru a permite Clientului să recunoască clasa Tehnologii, trebuie să introduceți @ Adnotare autorizată în clasa Clienți. Codul final al clasei de clienți ar trebui să fie după cum urmează:

package com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component public class Clienți {private int custid private String custname private String coursename @Autowired private Technologies techdetail public Tehnologii 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 ( 'Obiect returnat cu succes') techdetail.tech ()}}

După ce executați aceste fișiere, veți vedea rezultatele ca obiect returnat cu succes și cu succes, ceea ce implică faptul că dependența noastră de clase a fost îndeplinită. Consultați mai jos.

Acum că ați terminat cu articolul, consultați de Edureka, o companie de învățare online de încredere, cu o rețea de peste 250.000 de elevi mulțumiți răspândiți pe tot globul.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui „Ce este injecția de dependență? ' articol și ne vom contacta cât mai curând posibil.