Jeder, der das Frühlingsrahmen gelernt hat, muss von den beiden Konzepten von Spring gehört haben: IOC (Kontrollinversion) und DI (Abhängigkeitsinjektion). Für diejenigen, die neu im Frühling sind, haben sie immer das Gefühl, dass die Konzepte von IOC und DI vage und schwer zu verstehen sind. Heute werde ich Ihnen einige der technischen Online -Experten des Spring Framework IOC mit Ihnen teilen und über mein Verständnis von Frühlings -IOC sprechen.
Was ist IOC
Ioc-InversionofControl, dh "Control Inversion", ist keine Technologie, sondern eine Designidee. In der Java -Entwicklung bedeutet IOC, den Objekten zu geben, die Sie von Containern kontrolliert werden sollen, anstatt sie traditionell direkt in Ihren Objekten zu kontrollieren.
IOC, das der Kern des Frühlings ist, läuft die ganze Zeit durch. Für das Frühlingsgerüst ist die Spring für die Kontrolle des Lebenszyklus eines Objekts und der Beziehung zwischen Objekten verantwortlich. Was bedeutet das? Um ein einfaches Beispiel zu geben, wie finden wir eine Freundin? Eine häufige Situation ist, dass wir überall hingehen, um zu sehen, wo wir schöne und gut aussehende Frauen haben, und uns dann nach ihren Interessen, QQ-Nummern, Telefonnummern, IP-Nummern und IQ-Zahlen zu erkundigen. Finden Sie Wege, sie kennenzulernen, geben ihnen das, was sie mögen, und dann ... dieser Prozess ist komplex und tiefgreifend und wir müssen sich auf jeden Verknüpfung stellen. Gleiches gilt für die traditionelle Programmentwicklung. Wenn Sie in einem Objekt ein anderes Objekt verwenden möchten, müssen Sie es erhalten (neu für Sie selbst oder eine von JNDI abfragen). Nach dem Gebrauch muss das Objekt zerstört werden (z. B. Verbindung usw.), und das Objekt wird immer mit anderen Schnittstellen oder Klassen kombiniert.
Wie versteht man IOC? Der Schlüssel zum Verständnis von IOC ist die Klärung "Wer kontrolliert wer, was kontrolliert, warum ist es eine Umkehrung (es sollte positiv sein) und welche Aspekte der Umkehrung da sind", lassen Sie uns eingehend analysieren:
● Wer kontrolliert wen und was: Traditionelles Javase -Programmierdesign, wir erstellen Objekte direkt durch Neu im Objekt und das Programm erstellt aktiv abhängige Objekte. Während IOC einen speziellen Container hat, um diese Objekte zu erstellen, kontrolliert der IOC -Behälter die Erstellung von Objekten. Wer kontrolliert wen? Natürlich kontrolliert der IOC -Container das Objekt; Was zu kontrollieren? Das heißt, es steuert hauptsächlich den Erwerb externer Ressourcen (nicht nur Objekte, einschließlich Dateien usw.).
● Warum ist es Inversion? Welche Aspekte sind Inversion: Es gibt eine positive Rotation. Traditionelle Anwendungen werden von uns selbst im Objekt aktiv gesteuert, um das abhängige Objekt direkt zu erhalten, dh die positive Rotation; Während Inversion der Container ist, um abhängige Objekte zu erstellen und zu injizieren; Warum ist es Inversion? Da der Container uns hilft, abhängige Objekte zu finden und zu injizieren, akzeptiert das Objekt nur passiv abhängige Objekte, so dass es eine Inversion ist. Welche Aspekte sind Inversionen? Der Erwerb des abhängigen Objekts ist umgekehrt.
Verwenden wir die Legende, um zu veranschaulichen, dass die traditionelle Programmierung in Abbildung 1-1 dargestellt ist, die aktiv verwandte Objekte erstellt und sie dann kombiniert:
Abbildung 1-1 schematisches Diagramm der traditionellen Anwendung
Wenn ich IOC/DI-Container habe, werden diese Objekte in der Client-Klasse nicht mehr aktiv erstellt, wie in Abbildung 1-2 gezeigt:
Abbildung 1-2 schematisches Diagramm der Programmstruktur nach dem IOC/DI-Behälter hat IOC/DI-Behälter
1.1.2 Was kann IOC tun?
IOC ist keine Technologie, es ist nur ein Gedanke, eine wichtige Regel der objektorientierten Programmierung, die uns beantragen kann, wie man locker gekoppelte, bessere Programme entwirft. Traditionelle Anwendungen werden von uns innerhalb der Klasse aktiv erstellt, was zu einer hohen Kopplung zwischen Klassen führt und schwer zu testen ist. Mit dem IOC -Behälter wird die Kontrolle über das Erstellen und Finden von abhängigen Objekten an den Container übergeben, und der Container injiziert die kombinierten Objekte, sodass das Objekt locker gekoppelt ist, was auch für Tests zweckmäßig ist, erleichtert die funktionale Wiederverwendung und macht die gesamte Architektur des Programms sehr flexibel.
Tatsächlich stammt die größte Veränderung, die durch das Programmieren von IOC vorgenommen wurde, nicht aus dem Code, sondern aus der ideologischen Perspektive und der Änderung der "Master-Slave-Transposition". Der Antrag war ursprünglich der Chef und er nahm die Initiative, um Ressourcen zu erhalten. In der IOC/DI -Idee wurde die Anwendung jedoch passiv und er wartete passiv darauf, dass der IOC -Container die benötigten Ressourcen erstellt und injiziert.
IOC spiegelt gut eine der Regeln des objektorientierten Designs wider - die Hollywood -Regel: "Suchen Sie nicht nach uns, wir werden nach Ihnen suchen"; Das heißt, der IOC -Container hilft dem Objekt, das entsprechende abhängige Objekt zu finden und es zu injizieren, anstatt das Objekt, das aktiv danach sucht.
1.1.3 ioc und di
DI-Abhängigkeitsinjektion, dh "Abhängigkeitsinjektion": Die Abhängigkeiten zwischen Komponenten werden während der Laufzeit vom Container bestimmt. In bildlich injiziert der Container dynamisch eine bestimmte Abhängigkeit in die Komponente. Der Zweck der Abhängigkeitsinjektion ist nicht, mehr Funktionen in das Softwaresystem zu bringen, sondern die Häufigkeit der Wiederverwendung von Komponenten zu erhöhen und eine flexible und skalierbare Plattform für das System zu erstellen. Durch den Abhängigkeitsinjektionsmechanismus müssen wir nur die vom Ziel erforderlichen Ressourcen ohne Code angeben, um unsere eigene Geschäftslogik durch einfache Konfiguration zu vervollständigen, ohne sich darum zu kümmern, woher die spezifischen Ressourcen stammen und wer sie implementiert.
Einer der wichtigsten Punkte von IOC ist die dynamische Bereitstellung eines Objekts mit anderen Objekten, die es während des Systembetriebs benötigt. Dies wird durch DI (Abhängigkeitsinjektion) erreicht. Zum Beispiel muss Objekt A die Datenbank bedienen. In der Vergangenheit haben wir immer Code in A geschrieben, um ein Verbindungsobjekt zu erhalten. Mit der Feder müssen wir die Feder nur mitteilen, dass in A eine Verbindung benötigt wird, um diese Verbindung zu konstruieren und wann sie sie konstruieren sollen, muss A nicht wissen. Wenn das System ausgeführt wird, stellt die Feder zum richtigen Zeitpunkt eine Verbindung her und injiziert es dann in eine wie eine Injektion, wodurch die Kontrolle der Beziehung zwischen jedem Objekt abgeschlossen wird. A muss sich auf die Verbindung verlassen, um normal zu laufen, und diese Verbindung wird durch Frühjahr in eine Feder injiziert, und der Name der Abhängigkeitsinjektion kommt davon. Wie wird DI implementiert? Eine wichtige Funktion nach Java 1.3 ist die Reflexion, mit der das Programm Objekte dynamisch generieren, Objektmethoden ausführen und die Eigenschaften von Objekten beim Ausführen ändern können. Die Frühling wird durch Reflexion injiziert.
Der Schlüssel zum Verständnis von DI ist: "Wer hängt davon ab, wer, warum müssen Sie sich darauf verlassen, wer injiziert, wer und was es injiziert?" Lassen Sie es uns eingehend analysieren:
● Wer hängt davon ab, wen: Natürlich hängt die Anwendung vom IOC -Container ab;
● Warum Abhängigkeiten benötigt werden: Anwendungen müssen IOC -Container benötigen, um externe Ressourcen bereitzustellen, die von Objekten erforderlich sind.
● Wer injiziert wen: Es ist offensichtlich, dass der IOC -Container ein Objekt der Anwendung injiziert, ein Objekt, von dem die Anwendung abhängt;
● Was injiziert wird: Es wird für ein Objekt benötigt, um externe Ressourcen (einschließlich Objekte, Ressourcen und konstanten Daten) zu injizieren.
Wie ist die Beziehung zwischen IOC und DI? Tatsächlich werden sie aus verschiedenen Blickwinkeln aus demselben Konzept beschrieben. Da das Konzept der Kontrollinversion relativ vage ist (vielleicht wird es als das Grad der Containerkontrollobjekte verstanden, ist es schwierig, darüber nachzudenken, wer Objektbeziehungen aufrechterhalten wird). 2004 gab der Meister Martin Fowler einen neuen Namen: "Abhängigkeitsinjektion". Im Vergleich zu IOC beschreibt "Abhängigkeitsinjektion" eindeutig "das injizierte Objekt hängt vom IOC -Container -Konfigurationsabhängigkeitsobjekt ab".
Zusammenfassen
Tatsächlich hat jeder sein eigenes Verständnis des Konzepts des Frühlings -IOC, und es gibt keine Standardantwort. Die allgemeine Richtung ist genau richtig.
Bei dem oben genannten Umgangsinjektion und Kontrollinversion im Frühjahr geht es darum. Ich hoffe, es wird für alle hilfreich sein. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!