Qu'est-ce que l'injection de dépendance? - Savoir comment mettre en œuvre l'injection de dépendances

Cet article sur Qu'est-ce que l'injection de dépendances est un guide complet sur l'injection de dépendances avec une application pratique dans Spring Boot.

Dans un monde où nous travaillons quotidiennement avec des langages de programmation, nous avons tous tendance à rechercher des méthodes et des astuces pour nous faciliter la vie. Eh bien, l'injection de dépendances est l'une de ces techniques qui vise à aider le développeur à coder facilement en fournissant les dépendances d'un autre objet. Dans cet article sur Qu'est-ce que l'injection de dépendances, je vais vous aider à comprendre cette technique en détail.



Les sujets suivants seront traités dans cet article:



Alors, commençons avec cet article.

Qu'est-ce que l'injection de dépendance?

L'injection de dépendances est la capacité d'un objet à fournir les dépendances d'un autre objet.



Maintenant, j'en suis presque sûr, vous n'avez peut-être rien compris à la définition technique ci-dessus. Alors, laissez-moi dissiper la confusion pour vous.

Quand vous entendez le terme dépendance, que vous vient-il à l'esprit?

De toute évidence, quelque chose qui repose sur autre chose pour le soutien, n'est-ce pas?



Eh bien, c’est la même chose, dans le cas de la programmation également.

La dépendance en programmation est une approche où une classe utilise des fonctionnalités spécifiques d'une autre classe. Ainsi, par exemple, si vous considérez deux classes A et B, et dites que la classe A utilise des fonctionnalités de la classe B, alors cela implique que la classe A a une dépendance de la classe B.Maintenant, si vous codez en Java, vous devez savoir ça, tu doiscréer une instance de la classe B avant que les objets ne soient utilisés par la classe A.

Types de classes - Qu

Donc, si je dois maintenant définir l'injection de dépendance pour vous, alors le processus de création d'un objet pour une autre classe et de laisser la classe utiliser directement la dépendance s'appelle Injection de dépendance.. Il comprend principalement trois classes:

  • Classe de client: Il s'agit de la classe dépendante et dépend de la classe Service.

  • Classe de service: Cette classe fournit un service à la classe client.

  • Classe d'injecteur: Cette classe est chargée d'injecter l'objet de classe de service dans la classe client

Maintenant que vous avez compris ce qu'est l'injection de dépendance, permettez-moi ensuite de vous présenter le principe sur lequel repose l'injection de dépendance.

Inversion de contrôle

Comme je l'ai mentionné ci-dessus, l'inversion de contrôle est un principe sur lequel repose l'injection de dépendance. De plus, comme son nom l'indique, l'inversion de contrôle est essentiellement utilisée pour inverser différents types de responsabilités supplémentaires d'une classe plutôt que la responsabilité principale.

Si je dois vous expliquer en termes plus simples, prenez un exemple dans lequel vous avez la capacité de cuisiner. Selon le principe IoC, vous pouvez inverser le contrôle, donc au lieu de cuire des aliments, vous pouvez simplement commander directement de l'extérieur, où vous recevez de la nourriture à votre porte. Ainsi, le processus de nourriture qui vous est livré à votre porte est appelé l'inversion du contrôle.

Vous n'êtes pas obligé de cuisiner vous-même, vous pouvez commander la nourriture et laisser un livreur vous livrer la nourriture. De cette façon, vous n'avez pas à vous occuper des responsabilités supplémentaires et à vous concentrer uniquement sur le travail principal.

Maintenant que vous connaissez le principe de l'injection de dépendance, laissez-moi vous expliquer les types d'injection de dépendance.

Types d'injection de dépendance

Il existe principalement trois types d'injection de dépendance:

chef vs ansible vs marionnette
  • Injection de constructeur: Dans ce type d'injection, l'injecteur fournit la dépendance via le constructeur de classe client.

  • Injection de poseur / Injection de propriété: Dans ce type d'injection, la méthode injecteur injecte la dépendance à la méthode setter exposée par le client.

  • Injection d'interface: Dans ce type d'injection, l'injecteur utilise Interface pour fournir une dépendance à la classe client. Les clients doivent implémenter une interface qui exposera unméthode setterlequelaccepte la dépendance.

Jusqu'à présent, j'espère que vous avez compris le fait que Dependency Injection est responsable de créer des objets, de comprendre quelles classes nécessitent ces objets et enfin de fournir ces classes avec les objets. Alors, sur cette note, examinons ensuite les avantages de l'injection de dépendance.

Avantages de l'injection de dépendance

Avant d'énumérer les avantages de l'injection de dépendance, laissez-moi vous expliquer la nécessité de cette injection au niveau de l'industrie, pour vous aider à mieux comprendre les avantages.

Considérez un scénario, dans lequel vous avez une classe d'e-mails, dont la seule responsabilité est de prendre soin des e-mails reçus. Désormais, cette classe aura des objets tels que «À l'adresse e-mail», «De l'adresse e-mail», «Objet et corps de l'e-mail».

Maintenant, si l'entreprise souhaite enregistrer des messages texte et audio, pensez-vous que cette classe peut enregistrer le message?

Eh bien, la réponse est non?

En effet, la classe Email ne peut pas gérer les paramètres du texte et des messages audio. Dans de tels cas, vous devrez recréer la classe. Maintenant, recréer la classe est un travail assez fastidieux, surtout si vous y devez régulièrement. Au lieu de cela, si vous utilisez l'injection de dépendances, vous pouvez modifier les objets au moment de l'exécution. Ainsi, de cette manière, vous n'avez pas à recréer la classe, ce qui vous aide à bien des égards.

Donc, si je dois résumer les avantages de l'injection de dépendance, les avantages suivants sont les suivants:

Très bien, maintenant que vous connaissez les avantages de l'injection de dépendances, allons de l'avant et voyons comment implémenter l'injection de dépendances à l'aide de Spring Boot.

Comment implémenter DI à l'aide de Spring Boot?

Étape 1: Ouvrez votre Eclipse IDE et créez un Application Spring Boot en cliquant avec le bouton droit et en choisissant Projet Spring Starter . Puis mentionnez le nom du projet et cliquez sur terminer .

Pour obtenir le projet Spring Starter, vous devez installer Spring Tool Suite à partir du marché Eclipse. Dans le cas où vous n'avez pas installé Spring Too Suite, vous pouvez vous référer à mon article sur .

Vous verrez automatiquement qu'un fichier d'application est créé comme ci-dessous.

Étape 2: Ensuite, créez une classe dans le même package. Pour ce faire, faites un clic droit sur le fichier -> choisissez Classe et mentionnez le nom du cours. Cliquez ensuite sur terminer . Cela créera un Classe fichier. Ici, j'ai créé une classe Clients. Reportez-vous ci-dessous.

Étape 3: Après cela, mettons quelques propriétés pour la classe. Alors, disons, nous incluons Numéro client, nom du client et Nom du cours. Mentionnez le code ci-dessous.

package com.example.demo // nom du package public class Clients {private int custid private String custname private String coursename}

Étape 3.1: Une fois que vous avez terminé, vous devez générer des méthodes Getter et Setter pour ces propriétés. Pour ce faire, sélectionnez ces propriétés et faites un clic droit. Alors choisi La source -> Générez des méthodes Getter et Setter.

Votre code jusqu'à présent devrait être le suivant:

package com.example.demo public class Clients {private int custid private String custname private String nom de cours 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}}

Maintenant, envisagez un scénario dans lequel vous devez créer un objet pour les clients et vous ne souhaitez pas le faire manuellement. Dans un tel scénario, vous devrez alors utiliser l'injection de dépendances, pour obtenir les objets chaque fois que vous en avez besoin.

Alors, regardons ensuite comment nous pouvons réaliser la même chose.

Étape 4: Commencez par changer le ligne de course dans le fichier de classe d'application à ce qui suit:

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

Remarque: si vous obtenez une erreur, importez les éléments suivants:

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

Cette ligne de code ci-dessus renverra un objet au moment de l'exécution. Ajoutez maintenant le code suivant dans le fichier d'application.

clients c = context.getBean (clients.class)

La ligne ci-dessus indiquera au compilateur de renvoyer un objet de la classe client. Reportez-vous ci-dessous.

Étape 4.1: Maintenant, pour vérifier si cela fonctionne ou non, vous peut revenir à la classe Client et ajoutez une méthode comme suit:

public void display () {System.out.println ('Objet renvoyé avec succès')}

Cette méthode affichera une sortie «Objet renvoyé avec succès» en cas d'exécution réussie.

comment faire une capture d'écran dans le sélénium

Étape 4.2: Ensuite, vous devez revenir au dossier de candidature et mentionner les éléments suivants:

c.display ()

Grâce à cela, vous appelez l'objet de la classe Clients avec une référence de la méthode d'affichage. Reportez-vous à l'image ci-dessous pour le code de la classe Application jusqu'à présent:

Maintenant, si vous exécutez le projet, vous verrez un exception de Aucun haricot éligible de type . En effet, la classe client que vous avez définie n'est pas un Spring Bean, c'est-à-dire n'est pas un objet Spring. Reportez-vous ci-dessous.

Étape 4.3: Donc, pour dire cela au Spring Container, nous avons besoin d'un objet de la classe client. Pour ce faire, vous devez mentionner le Annotation @Component , dans la classe Customer. Le code de la classe Clients doit être comme ci-dessous:

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 ('Objet renvoyé avec succès')}}

Ensuite, lorsque vous mentionnez des clients c = context.getBean (clients.classe) le compilateur vérifiera si un bean client est disponible dans le conteneur ou non.

Si le Bean est disponible, le framework Spring injecte l'objet client dans votre application. Donc, fondamentalement, cet objet est créé par le framework Spring, qui peut être utilisé ultérieurement dans l'application.

Donc, si j'exécute ce projet maintenant, vous verrez une sortie que l'objet a renvoyé avec succès. Reportez-vous ci-dessous.

C'est essentiellement ainsi que vous pouvez implémenter l'injection de dépendances.

Exemple: injection de dépendances à l'aide d'annotation auto-câblée

quel est cet opérateur en java

J'espère que vous avez compris comment fonctionne l'injection de dépendances dans Spring Boot. Maintenant, étendons cet exemple et voyons plus en détail comment une classe dépendante de l'autre classe a utilisé les fonctionnalités de cette classe dans Spring Boot.

Étape 1: Créer un nouveau fichier de classe , de nouveau clic droit sur le package et le en choisissant Nouveau -> Classe. Maintenant, mentionnez le nom de la classe comme ci-dessous et cliquez sur Terminer.

Étape 2: Ensuite, mettons quelques propriétés pour la classe. Alors, disons, nous incluons TechID, Techname. Mentionnez le code ci-dessous.

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

Étape 2.1: Une fois que vous avez terminé, générez Méthodes Getter et Setter pour ces propriétés en cliquant avec le bouton droit sur le fichier, puis choisissez Source -> Générer les méthodes Getter et Setter.

Étape 3: Maintenant, disons, nous devons créer une méthode qui imprime ' Réussi «. Pour ce faire, mentionnez le code:

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

Votre code jusqu'à présent devrait ressembler à ci-dessous:

package 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 ('Successful')}}

Étape 4: Maintenant, pour appeler le méthode tech () dans le classe de clients , vous devez créer un objet de la classe technologies. Mentionnez donc la ligne de code suivante dans la classe clients:

technologies privées techdetail

Étape 4.1: Une fois que vous avez terminé, générez Méthodes Getter et Setter pour ces propriétés par clic droit sur le fichier puis choisissez Source -> Générer les méthodes Getter et Setter.

Étape 5: Ensuite, pour utiliser le méthode tech () , tu dois mentionner techdetail.tech () sous le méthode d'affichage de la classe clients . Aussi, pour vous assurer que l'objet techdetail est instancié, mentionnez Annotation @Component est le Classe de technologies. Reportez-vous ci-dessous.

Maintenant, lorsque vous exécutez ce projet, vous verrez un Exception de pointeur nul . C'est parce que maintenant le La classe Client dépend de la classe Technologies et pourtant elle ne connaît pas l'existence de la classe Technologies .

Ainsi, pour permettre au Client de reconnaître la classe Technologies, vous devez insérer le Annotation @Autowired dans la classe Clients. Votre code final de la classe clients doit être le suivant:

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 privé 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 ( 'Objet renvoyé avec succès') techdetail.tech ()}}

Une fois que vous exécutez ces fichiers, vous verrez les sorties comme Object Returned Successful et Successful, ce qui implique que notre dépendance des classes a été remplie. Reportez-vous ci-dessous.

Maintenant que vous avez terminé avec l'article, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de ce document «Qu'est-ce que l'injection de dépendances? 'Article et nous vous répondrons dans les plus brefs délais.