134 votes

Qu'est-ce que l'injection de dépendances et l'inversion de contrôle dans Spring Framework ?

"L'injection de dépendances et l'inversion de contrôle sont souvent mentionnées comme les principaux avantages de l'utilisation du framework Spring pour le développement de frameworks Web.

Quelqu'un pourrait-il expliquer ce que c'est en termes très simples avec un exemple si possible ?

0 votes

4 votes

@SteveChambers ce n'est pas un doublon, cette question est posée dans la perspective des sources. Cette question est posée en perspective générale.

0 votes

279voto

Krishnakant Kadam Points 2805
  • Spring aide à la création d'applications faiblement couplées grâce à Injection de dépendances .
  • Dans Spring, les objets définissent leurs associations (dépendances) et ne s'inquiètent pas de savoir comment ils vont obtenir ces associations. Dépendances . Il est de la responsabilité de Spring de fournir les dépendances nécessaires à la création des objets.

Par exemple : Supposons que nous ayons un objet Employee et il a un lien de dépendance avec l'objet Address . Nous définirions un haricot correspondant à Employee qui définira sa dépendance à l'égard de l'objet Address .

Lorsque Spring essaie de créer un Employee il verra que Employee a une dépendance à l'égard de Address donc il créera d'abord le Address (objet dépendant) et l'injecter ensuite dans l'objet Employee objet.

  • Inversion du contrôle ( IoC ) et l'injection de dépendances ( DI ) sont utilisés de manière interchangeable. L'IoC est réalisé par le biais de l'ID. DI est le processus qui consiste à fournir les dépendances et IoC est le résultat final de DI. ( Note : DI n'est pas le seul moyen de réaliser IoC. Il existe autres moyens également).

  • Grâce à DI, la responsabilité de la création des objets est déplacée de notre code d'application vers le conteneur Spring ; ce phénomène est appelé IoC.

  • L'injection de dépendances peut se faire par injection de setter ou par injection de constructeur.

34voto

Veke Points 50

Je vais écrire ma compréhension simple de ces deux termes : (Pour une compréhension rapide, il suffit de lire les exemples)

  • Injection de dépendances (DI) :
    L'injection de dépendances signifie généralement le passage d'un objet dépendant en tant que paramètre à une méthode, plutôt que la création de l'objet dépendant par la méthode. .
    En pratique, cela signifie que la méthode ne dépend pas directement d'une implémentation particulière ; toute implémentation répondant aux exigences peut être passée en paramètre.

    Avec cette mise en œuvre des objets définit leurs dépendances. Et Spring les rend disponibles.
    Cela conduit au développement d'applications à couplage lâche.

    Exemple rapide : L'OBJET EMPLOYÉ QUAND IL EST CRÉÉ, IL CREERA AUTOMATIQUEMENT L'OBJET ADRESSE (si l'adresse est définie comme dépendance par l'objet Employé)*.

  • Conteneur d'inversion de contrôle (IoC) :
    C'est une caractéristique commune aux frameworks, IoC gère les objets java
    - de l'instanciation à la destruction en passant par son BeanFactory.
    - Les composants Java qui sont instanciés par le conteneur IoC sont appelés "beans", et le conteneur IoC a pour mission de les faire fonctionner. Le conteneur IoC gère la portée d'un bean, les événements du cycle de vie et toutes les fonctionnalités AOP. pour lequel il a été configuré et codé.

    QUICK EXAMPLE:Inversion of Control is about getting freedom, more flexibility, and less dependency. When you are using a desktop computer, you are slaved (or say, controlled). You have to sit before a screen and look at it. Using keyboard to type and using mouse to navigate. And a bad written software can slave you even more. If you replaced your desktop with a laptop, then you somewhat inverted control. You can easily take it and move around. So now you can control where you are with your computer, instead of computer controlling it .

    En mettant en œuvre l'inversion de contrôle, un consommateur de logiciel/objet obtient plus de contrôles/options sur le logiciel/objet, au lieu d'être contrôlé ou d'avoir moins d'options.

    L'inversion du contrôle en tant que ligne directrice de conception sert les objectifs suivants :
    - Il y a un découplage entre l'exécution d'une certaine tâche et la mise en œuvre.
    - Chaque module peut se concentrer sur ce pour quoi il a été conçu.
    - Les modules ne font aucune supposition sur ce que font les autres systèmes, mais s'appuient sur leurs contrats.
    - Le remplacement des modules n'a aucun effet secondaire sur les autres modules.

Je vais garder les choses abstraites ici, vous pouvez visiter les liens suivants pour une compréhension détaillée du sujet.

Une bonne lecture avec un exemple

Explication détaillée

12voto

Venkateswara Rao Points 133

Dans Spring, les objets sont faiblement couplés, c'est-à-dire que chaque classe est indépendante des autres, de sorte que tout peut être testé individuellement. Mais lors de l'utilisation de ces classes, une classe peut être dépendante d'autres classes qui doivent être instanciées en premier.

Ainsi, nous disons à Spring que la classe A est dépendante de la classe B. Ainsi, lors de la création d'un bean (comme une classe) pour la classe A, il instancie la classe B avant celle de la classe A et l'injecte dans la classe A en utilisant les méthodes setter ou constructor DI. C'est-à-dire que nous indiquons à Spring la dépendance au moment de l'exécution. Il s'agit d'une DI.

Comme nous confions la responsabilité de la création d'objets (beans), de leur maintenance et de leurs agrégations à Spring au lieu de les coder en dur, nous l'appelons Inversion Of Control (IOC).

12voto

Hetal Rachh Points 462

Inversion de contrôle- Cela signifie donner le contrôle de la création et de l'instanciation des beans au conteneur Spring IOC et le seul travail que le développeur doit faire est de configurer les beans dans le fichier xml de Spring.

Injection de dépendances-

Considérons une classe Employé

class Employee { 
   private int id;
   private String name;
   private Address address;

   Employee() {
     id = 10;
     name="name";
     address = new Address();
   }

}

et considérer la classe Adresse

class Address {
   private String street;
   private String city;

   Address() {
     street="test";
     city="test1";

  }
}

Dans le code ci-dessus, les valeurs de la classe d'adresse ne seront définies que lorsque la classe d'employé sera instanciée, ce qui constitue une dépendance de la classe d'adresse à la classe d'employé. Et Spring résout ce problème en utilisant le concept d'injection de dépendance en fournissant deux façons d'injecter cette dépendance.

  1. Injection de setter

Méthode Setter dans la classe Employé qui prend une référence de la classe Adresse

public void setAddress(Address addr) {
    this.address = addr;
}
  1. Injection du constructeur

Constructeur de la classe Employé qui accepte l'adresse

Employee(Address addr) {
      this.address = addr;
}

De cette façon, les valeurs de la classe d'adresse peuvent être définies indépendamment en utilisant l'injection de setter/constructor.

9voto

Girish Kumar Points 954

Inversion de contrôle (IOC) :

IoC est un modèle de conception qui décrit l'inversion du flux de contrôle dans un système, de sorte que le flux d'exécution n'est pas contrôlé par un morceau de code central. Cela signifie que les composants ne doivent dépendre que des abstractions d'autres composants et ne sont pas responsables de la gestion de la création d'objets dépendants. Au lieu de cela, les instances d'objets sont fournies au moment de l'exécution par un conteneur IoC par le biais de l'injection de dépendances (DI).

L'IoC permet une meilleure conception des logiciels qui facilite la réutilisation, le couplage souple et l'essai facile des composants logiciels.

Injection de dépendances (DI) :

DI est une technique pour passer des dépendances dans le constructeur d'un objet. Si l'objet a été chargé depuis le conteneur, ses dépendances seront automatiquement fournies par le conteneur. Cela vous permet de consommer une dépendance sans avoir à créer manuellement une instance. Cela réduit le couplage et vous donne un meilleur contrôle sur la durée de vie des instances d'objets.

cliquez pour voir plus

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X