Heim  >  Artikel  >  Java  >  Was ist der Unterschied zwischen Inversion of Control und Dependency Injection?

Was ist der Unterschied zwischen Inversion of Control und Dependency Injection?

清浅
清浅Original
2019-04-24 14:44:0221287Durchsuche

Die Unterschiede zwischen der Umkehrung der Kontrolle und der Abhängigkeitsinjektion sind: Die Abhängigkeitsinjektion wird aus der Perspektive der Anwendung beschrieben, während die Umkehrung der Kontrolle aus der Perspektive des Containers beschrieben wird, während sich die Umkehrung der Kontrolle auf Prinzipien konzentriert Die Injektion konzentriert sich auf die Umsetzung.

Was ist der Unterschied zwischen Inversion of Control und Dependency Injection?

[Empfohlener Kurs: Java-Tutorial]

Der Unterschied zwischen Kontrollumkehr und Abhängigkeitsinjektion

IOC-Kontrollumkehr Umkehrung der Kontrolle

DI-Abhängigkeitsinjektion Abhängigkeitsinjektion

Um diese beiden Konzepte zu verstehen, müssen wir zunächst folgende Fragen klären:

Wer sind die Teilnehmer?

Abhängigkeit: Wer ist von wem abhängig? Warum brauchen wir Abhängigkeiten?

Injektion: Wer spritzt in wen? Was genau wird gespritzt?

Kontrollumkehr: Wer kontrolliert wen? Was kontrollieren? Warum spricht man von einer Umkehrung (wenn es eine Umkehrung gibt, sollte es eine Vorwärtsumkehr geben)?

Sind Abhängigkeitsinjektion und Umkehrung der Kontrolle dasselbe Konzept?

Beantworten wir kurz die oben genannten Fragen. Sobald diese Fragen verstanden sind, wird auch IOC/DI verstanden.

(1) Wer sind die Teilnehmer:

Im Allgemeinen gibt es drei Parteien, eine ist ein bestimmtes Objekt; die andere ist ein IOC/DI-Container; externe Ressource für ein Objekt.

Ein Objekt bezieht sich auf jedes gewöhnliche Java-Objekt

IOC/DI-Container bezieht sich einfach auf ein Rahmenprogramm, das zur Implementierung von IOC/DI-Funktionen verwendet wird

Die externen Ressourcen des Objekts beziehen sich auf das, was das Objekt benötigt, aber sie werden von außerhalb des Objekts bezogen. Sie werden zusammenfassend als Ressourcen bezeichnet, z. B.: andere vom Objekt benötigte Objekte oder vom Objekt benötigte Dateiressourcen usw.

(2) Wer hängt von wem ab:

Natürlich hängt ein bestimmtes Objekt vom IOC/DI-Container ab

(3 ) Warum Abhängigkeiten benötigt werden:

Objekte benötigen IOC/DI-Container, um externe Ressourcen bereitzustellen, die von Objekten benötigt werden

(4) Wer injiziert in wen:

Offensichtlich injiziert der IOC/DI-Container ein Objekt

(5) Was genau injiziert wird:

Das ist es Injizieren Sie externe Ressourcen, die für ein Objekt erforderlich sind

(6) Wer kontrolliert wen:

Natürlich ist es der IOC/DI-Container, der das steuert Objekt

(7) Was zu kontrollieren ist:

Steuert hauptsächlich die Erstellung von Objektinstanzen

(8) Warum ist es heißt umgekehrt Umkehren:

Umkehrung ist relativ zur positiven Richtung, was zählt also als positiv? Denken Sie über die Anwendung unter normalen Umständen nach, wenn Sie C in A verwenden möchten. Natürlich wird das Objekt von C direkt erstellt, dh die erforderliche externe Ressource C wird aktiv in Klasse A abgerufen. Diese Situation wird als vorwärts bezeichnet. Was ist also umgekehrt? Das heißt, Klasse A erhält C nicht mehr aktiv, sondern wartet passiv darauf, dass der IOC/DI-Container eine Instanz von C erhält, und fügt sie dann umgekehrt in Klasse A ein.

Verwenden Sie zur Veranschaulichung zunächst das schematische Diagramm der herkömmlichen Klasse A mit Klasse C, wenn kein IOC/DI vorhanden ist, wie in der Abbildung gezeigt:

Was ist der Unterschied zwischen Inversion of Control und Dependency Injection?

Mit dem IOC/DI-Container erstellt Klasse A nicht mehr aktiv C, wie in der Abbildung gezeigt:

Was ist der Unterschied zwischen Inversion of Control und Dependency Injection?

sondern passiv Warten Warten Sie, bis der IOC/DI-Container eine Instanz von C erhält, und fügen Sie sie dann umgekehrt in Klasse A ein, wie in der Abbildung gezeigt:

Was ist der Unterschied zwischen Inversion of Control und Dependency Injection?

(9 ) Sind Abhängigkeitsinjektion und Umkehrung der Kontrolle dasselbe Konzept?

Anhand der obigen Beschreibung sollten Sie erkennen können, dass Abhängigkeitsinjektion und Umkehrung der Kontrolle unterschiedliche Beschreibungen derselben Sache sind. In einem bestimmten Aspekt werden sie aus unterschiedlichen Perspektiven beschrieben. Die Abhängigkeitsinjektion wird aus der Perspektive der Anwendung beschrieben. Die vollständige Beschreibung lautet: Die Anwendung ist auf den Container angewiesen, um die benötigten externen Ressourcen zu erstellen und zu injizieren. Der Container steuert die Anwendung. Der Container injiziert umgekehrt die von der Anwendung benötigten externen Ressourcen.

Zusammenfassung:

Tatsächlich ergibt sich die größte Veränderung, die IOC/DI für die Programmierung mit sich bringt, nicht aus dem Code, sondern aus der Perspektive des „Master-Slave“-Denkens „Transposition“ sind Änderungen eingetreten. Ursprünglich war die Anwendung der Chef und ergriff die Initiative, um alle Ressourcen zu erhalten. Im IOC/DI-Denken wird die Anwendung jedoch passiv und wartet passiv darauf, dass der IOC/DI-Container die benötigten Ressourcen erstellt und einspeist. Eine so kleine Änderung stellt tatsächlich einen großen Fortschritt im Programmierdenken dar, der das Objekt und die dafür erforderlichen externen Ressourcen effektiv trennt, sie lose gekoppelt macht, die funktionale Wiederverwendung begünstigt und, was noch wichtiger ist, die Struktur des gesamten Programmsystems sehr verbessert flexibel

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Inversion of Control und Dependency Injection?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn