Wie verhält sich der DI-Container von Spring in diesem Eintrag (Objekte erstellen, abhängige Objekte auflösen)? Ich möchte den Bereich (grob) vorstellen. In diesem Eintrag gehen wir grundsätzlich davon aus, dass Sie "DI" kennen. Wer ist also überhaupt "DI"? Wenn ja, überprüfen Sie bitte "DI" im Internet oder in Büchern.
Der Inhalt der in diesem Eintrag vorgestellten Abbildungen ist die tatsächliche Verarbeitung, die von Spring ausgeführt wird (wobei festgestellt wird, dass das Wesentliche dessen, was Sie in diesem Eintrag einführen möchten, beeinträchtigt werden kann, wenn Genauigkeit angestrebt wird). Bitte beachten Sie, dass es einige Unterschiede gibt.
Bevor Sie ein Programm schreiben, das den DI-Container von Spring verwendet, sehen wir uns zunächst an, was passiert, wenn Sie ein Programm schreiben, das mehrere Klassen (Objekte) verwendet, ohne die Idee von DI-Container und DI zu verwenden.
Wahrscheinlich ... wird es so aussehen:
Es ist ein sehr gewöhnliches Java-Programm.
Weiter ... Ich werde ein Programm schreiben, das die Idee von DI enthält. Lassen Sie uns insbesondere die Idee von DI in den Teil integrieren, in dem die Methode aufgerufen wird, nachdem das B-Klassenobjekt in der A-Klasse erstellt wurde (der Teil, in dem die Abhängigkeit von der B-Klasse auftritt).
Durch die Integration der Idee von DI in die A-Klasse wurde der Prozess des Erstellens von B-Klassenobjekten in der A-Klasse eliminiert. Mit einer solchen Konfiguration kann eine Klasse zusätzlich zur B-Klasse eine Verarbeitung unter Verwendung von Objekten der untergeordneten Klasse der Klasse B ausführen (z. B. beim Durchführen eines Komponententests der Klasse A). Sie können eine untergeordnete Klasse der Test-B-Klasse anstelle der B-Klasse verwenden.
NOTE:
Dieser Eintrag basiert auf "DI using constructor", es gibt aber auch "DI using setter method" als DI-Typ.
Ich denke, es ist besser, den Konstruktor und den Setter anhand der folgenden Kriterien richtig zu verwenden (Spring Reference. Framework-Referenz / core.html # Beans-Factory-Collaborators) steht zum Verkauf w).
- Konstruktor für DI erforderlich
- Wenn DI beliebig ist (es gibt ein Objekt, das standardmäßig verwendet werden soll, und DI wird als Option behandelt), die Setter-Methode
Wenn Sie die oben genannte Verwendung kennen, sieht das Verwendungsbild wie folgt aus.
Verwenden Sie bei der Ausführung über die Bootstrap-Klasse das "im A-Objekt vorgenerierte B-Objekt" und bei der Ausführung über die Testklasse das "B-Objekt zum Testen". Ich habe versucht, es für die Verwendung zu konfigurieren.
Obwohl in diesem Eintrag nicht vorgestellt, verfügt Spring auch über einen Mechanismus zum "DI direkt zum Feld" (als aktueller Trend scheint "DI zum Feld" nicht verwendet zu werden. Die Menge an Code ist jedoch gering, da es sich um "DI to the field" handelt ... Ich verwende ihn manchmal ohne nachzudenken / w).
Nachdem wir die von uns verwendete Klasse in eine DI-fähige Klasse geändert haben, wollen wir sehen, was passiert, wenn wir ein Programm mit dem DI-Container von Spring schreiben (darauf warten!?).
Vor dem Ändern des Programms ... Machen Sie den Teil, der die Objekte der im Programm verwendeten Klassen (A-Klasse und B-Klasse) erstellt, zu Bean-Definitionsklassen (Konfigurationsklassen).
Erstellen Sie nach dem Erstellen der Bean-Definitionsklasse einen DI-Container (Anwendungskontext) und ändern Sie das Programm, um die Bean (ein Klassenobjekt) der Klasse, die der Einstiegspunkt für die eigentliche Verarbeitung ist, aus dem DI-Container abzurufen.
Nachdem Sie nun den DI-Container von Spring verwenden können, sehen wir uns an, wie der DI-Container von Spring funktioniert.
Ich habe das Programm so geändert, dass es den DI-Container von Spring verwendet, aber es ist fast unmöglich, nur zwei Klassen in einer echten App zu verwenden ... Ich werde viel mehr Klassen verwenden. Zu diesem Zeitpunkt ... Es scheint schwierig zu sein, eine Methode zum Erstellen einer Bean in der Bean-Definitionsklasse zu definieren (in der Abbildung: MyConfig-Klasse)! ?? Wenn Sie die Bean-Definition schwierig finden, können Sie die Bean-Definition mithilfe der Komponenten-Scan-Funktion vereinfachen. Speziell···
Bitte.
Der Gesamtfluss ist der gleiche wie wenn die Komponentenscanfunktion nicht verwendet wird, aber der Prozess zum Generieren von Beans (Prozesse (2) bis (4) in der Abbildung) ist unterschiedlich. Bei Verwendung der Komponentenscanfunktion wird die Bean-Definition aus den gescannten Klassenmetadaten (Klassenanmerkung, Methodenanmerkung usw.) ermittelt und die Bean generiert.
Obwohl sich die Inhalte geringfügig unterscheiden, wird das Beispiel der in diesem Eintrag eingeführten Inhalte im folgenden Repository gespeichert.
Dieses Mal habe ich das Operationsbild eingeführt, wenn ich den DI-Container von Spring verwendet habe. Der in diesem Eintrag eingeführte Inhalt ist nur ein Teil (Touch-Teil) des gesamten Bilds des Spring DI-Containers. Um die Funktionen des DI-Containers effektiv zu nutzen, werden "Bean-Bereich" und "Bean-Priorität" verwendet. Sie müssen auch den Mechanismus der "Initialisierung / Verwerfungsverarbeitung", "AOP (Proxy)", "Profil" usw. kennen. Das Lesen dieses Eintrags ist jedoch der erste Schritt bei der Entwicklung einer Anwendung unter Verwendung des DI-Containers von Spring. Ich würde mich freuen, wenn Sie einen Schritt nach vorne machen könnten: grinsen :.
Eigentlich können Sie eine Anwendung durch "Nachahmung" entwickeln, ohne den Mechanismus des DI-Containers zu kennen. Sie können ein Ingenieur werden, der manchmal einfriert. Sofortige "Ergebnisse" sind wichtig (obwohl sie möglicherweise priorisiert werden müssen), aber es ist sehr wichtig zu verstehen, wie Ihr Programm als Anwendung funktioniert (= Funktionsprinzip). Ich denke es ist wichtig. Wenn es vorerst funktioniert, Sie aber nicht wissen, wie es funktioniert (= launisch), können Sie anhalten und die Grundlagen lernen, um diese Laune loszuwerden, und Sie können es bis jetzt nicht sehen (Hinweis) Ich denke, Sie können sehen, was ich nicht konnte.
Recommended Posts