Què és la injecció per dependència? - Saber implementar la injecció de dependència

Aquest article sobre Què és la injecció de dependència és una guia completa sobre la injecció de dependència amb pràctiques a l'arrencada de primavera.

En un món on treballem dia a dia amb llenguatges de programació, tots tendim a buscar mètodes i trucs per facilitar la nostra vida. Bé, la injecció de dependència és una d'aquestes tècniques que té com a objectiu ajudar el codi del desenvolupador fàcilment proporcionant dependències d'un altre objecte. En aquest article sobre Què és la injecció per dependència, us ajudaré a entendre aquesta tècnica amb detall.



En aquest article es tractaran els temes següents:



Comencem, doncs, amb aquest article.

Què és la injecció per dependència?

La injecció de dependència és la capacitat d’un objecte per subministrar dependències d’un altre objecte.



Ara, estic bastant segur, potser no hagueu entès res per la definició tècnica anterior. Per tant, deixeu-me aclarir la confusió.

Quan se sent el terme dependència, què li ve al cap?

Viouslybviament, alguna cosa que es basa en una altra cosa per obtenir suport, oi?



Bé, això és el mateix, també en el cas de la programació.

La dependència en la programació és un enfocament en què una classe utilitza funcionalitats específiques d’una altra classe. Així, per exemple, si teniu en compte dues classes A i B, i dieu que la classe A utilitza funcionalitats de la classe B, implica que la classe A té una dependència de la classe B. Ara, si esteu codificant a Java, heu de saber això, calcreeu una instància de classe B abans que els objectes siguin utilitzats per la classe A.

Tipus de classes - Què és la injecció de dependència - Edureka

Per tant, si ara he de definir la injecció de dependència, el procés de creació d’un objecte per a una altra classe i deixar que la classe utilitzant directament la dependència s’anomeni injecció de dependència.. Inclou principalment tres classes:

  • Classe de client: Aquesta és la classe dependent i depèn de la classe de servei.

  • Classe de servei: Aquesta classe proporciona un servei a la classe client.

  • Classe d’injectors: Aquesta classe s’encarrega d’injectar l’objecte de classe de servei a la classe client

Ara, ja que heu entès què és la injecció per dependència, deixeu-me que us expliqui el principi en què es basa la injecció per dependència.

Inversió del control

Com he esmentat anteriorment, la inversió del control és un principi basat en el qual es fa la injecció de dependència. A més, com el seu nom indica, Inversió de control s'utilitza bàsicament per invertir diferents tipus de responsabilitats addicionals d'una classe en lloc de la responsabilitat principal.

Si us he d’explicar en termes més senzills, penseu en un exemple en què tingueu la capacitat de cuinar. Segons el principi de la IoC, podeu invertir el control, de manera que, en lloc de cuinar aliments, podeu demanar directament des de fora, on rebreu menjar a casa vostra. Per tant, el procés de menjar que se us lliura a la porta de casa es denomina Inversió del control.

No heu de cuinar vosaltres mateixos, sinó que podeu demanar el menjar i deixar que un responsable de lliurament us lliuri el menjar. D'aquesta manera, no cal que us ocupeu de les responsabilitats addicionals i us heu de centrar en el treball principal.

Ara, ja que coneixeu el principi que hi ha darrere de la injecció per dependència, permeteu-me que us expliqui els tipus d'injecció per dependència.

Tipus d’injecció de dependència

Hi ha principalment tres tipus d’injecció de dependència:

implementació de llista enllaçada al c
  • Injecció del constructor: En aquest tipus d'injecció, l'injector subministra dependència a través del constructor de la classe client.

  • Injecció setter / injecció de propietats: En aquest tipus d’injecció, el mètode injector injecta la dependència del mètode setter exposat pel client.

  • Injecció d'interfície: En aquest tipus d'injecció, l'injector utilitza la interfície per proporcionar dependència a la classe de client. Els clients han d'implementar una interfície que exposi unmètode setterquinaccepta la dependència.

Fins ara, espero que hagueu entès el fet que la injecció de dependència és responsable de crear objectes, entendre quines classes requereixen aquests objectes i, finalment, proporcionar a aquestes classes els objectes. Per tant, en aquesta nota, analitzem a continuació els avantatges de la injecció per dependència.

Beneficis de la injecció per dependència

Abans d’enumerar els avantatges de la injecció per dependència, permeteu-me explicar-vos la necessitat d’aquesta injecció a nivell industrial, per ajudar-vos a comprendre millor els beneficis.

Penseu en un escenari en què tingueu una classe de correu electrònic, l’única responsabilitat de la qual és tenir cura dels correus electrònics rebuts. Ara, aquesta classe tindrà objectes com ara 'A l'adreça electrònica', 'Des de l'adreça electrònica', 'Assumpte i cos del correu electrònic'.

Ara, si l'empresa vol desar missatges de text i àudio, creieu que aquesta classe pot desar el missatge?

Bé, la resposta és no?

Això es deu al fet que la classe de correu electrònic no pot gestionar els paràmetres del text i dels missatges d'àudio. En aquests casos, haureu de recrear la classe. Ara, recrear la classe és una feina bastant feixuga, sobretot si ho heu de fer regularment. En canvi, si utilitzeu la injecció de dependència, podeu canviar els objectes en temps d'execució. Així, d’aquesta manera, no haureu de recrear la classe, cosa que us ajudarà de moltes maneres.

Per tant, si he de resumir els avantatges de la injecció de dependència, els avantatges següents són:

Molt bé, ara que ja coneixeu els avantatges de la injecció de dependència, anem a avançar i veurem com implementar la injecció de dependència mitjançant Spring Boot.

Com implementar DI mitjançant Spring Boot?

Pas 1: Obre el teu IDE Eclipse i creeu un fitxer Aplicació Spring Boot fent clic amb el botó dret i escollint Spring Starter Project . A continuació, mencioneu el nom del projecte i feu clic a Acabar .

Per obtenir el Spring Starter Project, heu d’instal·lar Spring Tool Suite des del mercat Eclipse. Per si no teniu instal·lada Spring Too Suite, podeu consultar el meu article sobre .

Veureu automàticament que es crea un fitxer d’aplicació com es mostra a continuació.

Pas 2: A continuació, creeu una classe al mateix paquet. Per fer-ho, feu clic amb el botó dret al fitxer -> trieu Classe i esmenta el nom de la classe. A continuació, feu clic a Acabar . Això crearà un fitxer Classe dossier. Aquí he creat una classe de clients. Consulteu a continuació.

Pas 3: Després d'això, posem algunes propietats per a la classe. Per tant, diguem-ho, hi inclourem Identificador de client, nom del client i Nom del curs. Esmenta el codi següent.

package com.example.demo // nom del paquet classe pública Clients {private int custid private String custname private String coursename}

Pas 3.1: Un cop hàgiu acabat això, heu de fer-ho generar mètodes Getter i Setter per a aquestes propietats. Per fer-ho, seleccioneu aquestes propietats i feu clic amb el botó dret. A continuació, tria Font -> Generar mètodes Getter i Setter.

El vostre codi fins ara hauria de ser el següent:

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

Ara, tingueu en compte un escenari en què haureu de crear un objecte per als clients i que no vulgueu fer-ho manualment. En aquest cas, haureu d'utilitzar la injecció de dependència per obtenir els objectes sempre que ho necessiteu.

Per tant, a continuació analitzem com podem aconseguir el mateix.

Pas 4: Primer, canvieu el fitxer línia d’execució al fitxer de classe d'aplicació al següent:

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

Nota: Si teniu un error, importeu el següent:

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

Aquesta línia de codi anterior retornarà un objecte en el moment de l'execució. Ara afegiu el següent codi al fitxer de l'aplicació.

clients c = context.getBean (clients.class)

La línia anterior indicarà al compilador que retorni un objecte de la classe client. Consulteu a continuació.

Pas 4.1: Ara, per comprovar si funciona o no, vosaltres pot tornar a la classe Client i afegiu un mètode de la següent manera:

public void display () {System.out.println ('Objecte retornat correctament')}

Aquest mètode mostrarà la sortida 'Objecte retornat correctament' quan s'executa correctament.

Pas 4.2: A continuació, heu de tornar al fitxer de sol·licitud i mencionar el següent:

c.display ()

Mitjançant això, crideu a l'objecte de la classe Clients amb una referència del mètode de visualització. Consulteu la imatge següent per obtenir el codi de la classe d'aplicació fins ara:

Ara, si executeu el projecte, veureu un fitxer excepció de cap tipus de mongeta qualificada . Això es deu al fet que la classe de client que heu definit no és Spring Bean, és a dir, no és un Spring Object. Consulteu a continuació.

Pas 4.3: Per tant, per dir-ho al Spring Container, necessitem un objecte de la classe client. Per fer-ho, heu d'esmentar el fitxer Anotació de components , a la classe Client. El codi de la classe Clients ha de ser el següent:

package com.example.demo import org.springframework.stereotype.Component @Component public class Clients {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 ('Objecte retornat correctament')}}

Després, quan esmenten els clients c = context.getBean (customers.class) el compilador comprovarà si hi ha un bean de client disponible al contenidor o no.

Si el Bean està disponible, el framework Spring injectarà l'objecte client a la vostra aplicació. Per tant, bàsicament, aquest objecte és creat pel framework Spring, que es pot utilitzar a l'aplicació.

Per tant, si executo aquest projecte ara, veureu una sortida que Object va retornar correctament. Consulteu a continuació.

Bàsicament, així és com podeu implementar la injecció de dependència.

Exemple: injecció de dependència mitjançant anotació connectada automàticament

c ++ salta a la línia

Espero que hagueu entès com funciona la injecció de dependència a Spring Boot. Ara, ampliem aquest exemple i vegem encara més com una classe que depèn de l’altra classe utilitzava les funcionalitats d’aquesta classe a Spring Boot.

Pas 1: Crea un nou fitxer de classe , de nou fent clic dret sobre el paquet i l'elecció Nou -> Classe. Ara, mencioneu el nom de la classe com es mostra a continuació i feu clic a Acabar.

Pas 2: A continuació, posem algunes propietats per a la classe. Per tant, diguem-ho, hi inclourem TechID, Techname. Esmenta el codi següent.

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

Pas 2.1: Un cop hàgiu acabat amb això, genereu Mètodes Getter i Setter per a aquestes propietats fent clic amb el botó dret del ratolí sobre el fitxer i, a continuació, trieu Font -> Genera mètodes Getter i Setter.

Pas 3: Ara, diguem, hem de crear un mètode que imprimeixi ' Amb èxit “. Per fer-ho, mencioneu el codi:

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

El vostre codi fins ara hauria de ser el següent:

package com.example.demo public class Tecnologies {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')}}

Pas 4: Ara, per trucar al mètode tech () al classe de clients , heu de crear un objecte de la classe de tecnologies. Per tant, mencioneu la següent línia de codi a la classe de clients:

detall tecnològic de tecnologies privades

Pas 4.1: Un cop hàgiu acabat amb això, genereu Mètodes Getter i Setter per a aquestes propietats per fent clic dret sobre el fitxer i després tria Font -> Genera mètodes Getter i Setter.

Pas 5: A continuació, per utilitzar el fitxer mètode tech () , cal esmentar-ho techdetail.tech () sota la mètode de visualització de la classe de clients . A més, per assegurar-se que l’objecte techdetail s’instancia en una menció Anotació de components és el Classe de tecnologies. Consulteu a continuació.

Ara, quan executeu aquest projecte, veureu un fitxer Excepció de punter nul . Això es deu al fet que ara La classe de client depèn de la classe de Tecnologies, però no coneix l'existència de la classe de Tecnologies .

Per tant, per permetre al client reconèixer la classe de Tecnologies, heu d’inserir el fitxer Anotació @Autowired a la classe Clients. El codi final de la classe de clients ha de ser el següent:

package com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component public class Clients {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 ( 'Objecte retornat correctament') techdetail.tech ()}}

Un cop hàgiu executat aquests fitxers, veureu les sortides com a objecte retornat correctament i amb èxit, cosa que implica que s'ha complert la nostra dependència de les classes. Consulteu a continuació.

Ara que heu acabat amb l'article, consulteu el fitxer per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món.

Tens alguna pregunta? Esmenta’l a la secció de comentaris d’aquest “Què és la injecció per dependència? ' article i ens posarem en contacte amb vostè el més aviat possible.