Maison > Java > javaDidacticiel > Quelle est la différence entre l'inversion de contrôle et l'injection de dépendances ?

Quelle est la différence entre l'inversion de contrôle et l'injection de dépendances ?

清浅
Libérer: 2020-09-09 17:14:12
original
21296 Les gens l'ont consulté

Les différences entre l'inversion de contrôle et l'injection de dépendances sont : l'injection de dépendances est décrite du point de vue de l'application, tandis que l'inversion de contrôle est décrite du point de vue du conteneur ; l'inversion de contrôle se concentre sur les principes, tandis que la dépendance ; L'injection se concentre sur la mise en œuvre.

Quelle est la différence entre l'inversion de contrôle et l'injection de dépendances ?

[Cours recommandés : Tutoriel Java]

La différence entre l'inversion de contrôle et l'injection de dépendance

Inversion de contrôle IOC Inversion de contrôle

Injection de dépendance DI Injection de dépendance

Pour comprendre ces deux notions, il faut d'abord clarifier les questions suivantes :

Qui sont les participants ?

Dépendance : Qui dépend de qui ? Pourquoi avons-nous besoin de dépendances ?

Injection : Qui injecte à qui ? Qu'est-ce qui est injecté exactement ?

Inversion de contrôle : qui contrôle qui ? Contrôler quoi ? Pourquoi appelle-t-on cela un renversement (s’il y a un renversement, il devrait y avoir un renversement vers l’avant) ?

L'injection de dépendances et l'inversion de contrôle sont-elles le même concept ?

Répondons brièvement aux questions ci-dessus. Une fois ces questions comprises, IOC/DI sera également compris.

(1) Qui sont les participants :

Généralement, il y a trois parties, l'une est un certain objet ; l'une est le conteneur IOC/DI ; ressource externe pour un objet.

Un objet fait référence à n'importe quel objet Java ordinaire

Le conteneur IOC/DI fait simplement référence à un programme-cadre utilisé pour implémenter les fonctions IOC/DI

Les ressources externes de l'objet font référence à ce dont l'objet a besoin, mais elles sont obtenues de l'extérieur de l'objet. Elles sont collectivement appelées ressources, telles que : d'autres objets nécessaires à l'objet, ou des ressources de fichiers nécessaires à l'objet, etc.

(2) Qui dépend de qui :

Bien sûr, un certain objet dépend du conteneur IOC/DI

(3 ) Pourquoi les dépendances sont nécessaires :

Les objets ont besoin de conteneurs IOC/DI pour fournir les ressources externes nécessaires aux objets

(4) Qui injecte dans qui :

Évidemment le conteneur IOC/DI injecte un objet

(5) Qu'est-ce qui est injecté exactement :

C'est ça Injecter les ressources externes nécessaires à un objet

(6) Qui contrôle qui :

Bien sûr c'est le conteneur IOC/DI qui contrôle le objet

(7) Que contrôler :

Contrôle principalement la création d'instances d'objet

(8) Pourquoi ça s'appelle inverse Inverse :

L'inversion est relative à la direction positive, alors qu'est-ce qui compte comme positif ? Pensez à l'application dans des circonstances normales. Si vous souhaitez utiliser C dans A, que feriez-vous ? Bien entendu, l'objet de C est créé directement, c'est-à-dire que la ressource externe requise C est activement obtenue dans la classe A. Cette situation est appelée en avant. Alors, qu’est-ce que l’inverse ? Autrement dit, la classe A n'obtient plus activement C, mais attend passivement que le conteneur IOC/DI obtienne une instance de C, puis l'injecte dans la classe A à l'envers.

Utilisez une illustration pour illustrer. Tout d'abord, regardez le diagramme schématique de la classe A conventionnelle utilisant la classe C lorsqu'il n'y a pas d'IOC/DI, comme indiqué dans la figure :

Quelle est la différence entre l'inversion de contrôle et l'injection de dépendances ?

Avec le conteneur IOC/DI, la classe A ne crée plus activement du C, comme le montre la figure :

Quelle est la différence entre l'inversion de contrôle et l'injection de dépendances ?

mais attend passivement , attendez que le conteneur IOC/DI obtienne une instance de C, puis injectez-la à l'envers dans la classe A, comme indiqué sur la figure :

Quelle est la différence entre linversion de contrôle et linjection de dépendances ?

(9 ) L'injection de dépendances et l'inversion de contrôle sont-elles le même concept ?

D'après la description ci-dessus, vous devriez pouvoir voir que l'injection de dépendance et l'inversion de contrôle sont des descriptions différentes de la même chose. Sous un certain aspect, elles sont décrites sous des perspectives différentes. L'injection de dépendances est décrite du point de vue de l'application. La description complète est la suivante : l'application s'appuie sur le conteneur pour créer et injecter les ressources externes dont elle a besoin, tandis que l'inversion du contrôle est décrite du point de vue du conteneur ; le conteneur contrôle l'application. Le conteneur injecte à l'envers les ressources externes requises par l'application dans l'application.

Résumé :

En fait, le plus grand changement qu'IOC/DI apporte à la programmation ne vient pas du code, mais du point de vue de la pensée "maître-esclave". transposition" a eu des changements. L'application était à l'origine le patron et prenait l'initiative d'obtenir toutes les ressources. Cependant, dans la pensée IOC/DI, l'application devient passive, attendant passivement que le conteneur IOC/DI crée et injecte les ressources dont elle a besoin. Un si petit changement est en fait un grand progrès dans la pensée de la programmation, qui sépare efficacement l'objet et les ressources externes dont il a besoin, les rendant faiblement couplés, propices à la réutilisation fonctionnelle et, plus important encore, rendant l'ensemble du système du programme La structure devient très flexible

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal