Vorwort
Als Codierer, der sich mit Java-Entwicklung befasst, ist die Bedeutung des Frühlings selbstverständlich. Möglicherweise haben Sie jeden Tag Spring -Frameworks zu tun. Der Frühling ist genannt und verleiht der Entwicklung von Java-Anwendungen einen federartigen Komfort. Der Frühling kann als notwendiges Grundlage für jeden Java -Entwickler sein, um die fortschrittliche Technologie zu erreichen. Natürlich ist es nicht einfach, den Frühling gut zu lernen, insbesondere die zugrunde liegenden Prinzipien des Frühlings. Es braucht viel Zeit und Energie, um es sorgfältig zu studieren, und ständig Versuch und Irrtum und fassungsvoll in tatsächlichen Projekten zusammenzufassen, um Ihr eigenes Denken und Verständnis zu bilden. Der Blogger hatte am Anfang ein sehr flaches Verständnis für den Frühling, und es war möglich, sich auf das Problem zu verlassen, das Du Niang auf allgemeine Weise bei Problemen im Projekt aufnehmen konnte. Seit mehr als einem Jahr seit dem Frühjahr ist das Verständnis seines Rahmensystems jedoch ziemlich chaotisch und die tiefe Technologie ist immer noch wie ein Nebel und hat keine eigene Wahrnehmung und Verständnis gebildet, was für die Verbesserung der Programmierungstechnologie sehr ungünstig ist. In Anbetracht dessen habe ich beschlossen, mich von Anfang bis Ende systematisch systematisch zu beruhigen und systematisch zu lernen, die Lerndetails aufzuzeichnen und technisches Wissen über die Form eines Blogs zu teilen. Okay, lass uns zum Punkt kommen.
Einführung in den Kernfeder -Framework
DI (Abhängigkeitsinjektion), Abhängigkeitsinjektion und ein anderes Konzept, von dem wir oft hören, implementiert tatsächlich die gleichen Funktionen wie IOC (Kontrollinversion), aber die gleichen Funktionen werden aus verschiedenen Perspektiven erklärt. Der Blogger hier wird nicht zu sehr analysieren, es gibt viele Erklärungen zu Baidu. Was wir wissen müssen, ist, welche Abhängigkeitsinjektion ist und warum Abhängigkeitsinjektion ist. Um diese beiden Punkte zu verstehen, denke ich, dass das Lernen des Frühlings am besten in Bezug auf das Denken ist.
Wenn die Frühling nicht verwendet wird - dh wenn es keine Abhängigkeitsinjektion gibt, ist es schwierig, gegenseitige funktionelle Zusammenarbeit zwischen Klassen von Java -Anwendungen zu erreichen. Wenn eine bestimmte Klasse (a) ihre Funktionen implementieren muss, wenn sie sich auf die Zusammenarbeit einer anderen Klasse (b) verlassen muss, ist es erforderlich, ein Objekt der Klasse B in der Klasse A aktiv zu erstellen, um die Funktionen mit den Methoden der Klasse B zu vervollständigen (Sie sollten sich hier keine Sorgen um statische Methoden und andere Situationen machen). Dies entspricht der Klasse A, die für die Verwaltung des gesamten Lebenszyklus von Objekten der Klasse B verantwortlich ist. In extrem einfachen Fällen scheint es, dass neue Objekte einer anderen Klasse in einer Klasse kein Problem haben, aber die kollaborative Beziehung zwischen komplexen Anwendungsklassen und Klassen ist häufig multilateral. Wir wissen nicht, wie viele alternative Objekte die Implementierung einer Klassenfunktion für die Zusammenarbeit beruhen werden. Das Erstellen von Objekten in einer Klasse und das Verwalten des gesamten Lebenszyklus des Objekts verursachen daher eine hohe Code -Kopplung und die unvorstellbare Komplexität. Stellen Sie sich also vor, wir können den Lebenszyklus eines Objekts an eine Drittanbieterkomponente für die Verwaltung übergeben, und wenn eine Klasse ein anderes Objekt benötigt, wird die Komponente von Drittanbietern direkt an ihm erstellt. Auf diese Weise kann sich die Klasse nur auf die Implementierung ihrer eigenen Funktionen konzentrieren, ohne den Lebenszyklus anderer Klassenobjekte zu verwalten. Die Funktionen einer solchen Klasse sind viel einfacher. Ja, Sie müssen verstanden haben, dass der Frühling diese Komponente von Drittanbietern ist. Wir müssen nur die Spring (Container) sagen, welche Objekte verwaltet werden müssen, und wir müssen uns nicht darum kümmern, wie das Spring -Framework Objekte schafft. Auf diese Weise, wenn ein bestimmtes Objekt der Klasse A die Klasse B erfordert, wenn die Klasse B deklariert und an das Feder -Container -Management übergeben wurde, injiziert das Programm, wenn das Programm auf Klasse A geht und die Klassen -B -Klassen -B benötigt, die Spring -Container -Objekte der Klasse B in die Klasse A durch Abhängigkeitsinjektion, um die Geschäftsfunktionen zu unterstützen. Durch die Abhängigkeitsinjektion von Komponenten von Drittanbietern müssen Objekte keine Abhängigkeiten zwischen den Klassen selbst erstellen und verwalten. Es gibt auch viele Möglichkeiten, die Abhängigkeitsinjektion von Objekten zu erzeugen, wie z. B. Schnittstelleninjektion, Injektion von Konstruktionsmethoden, Setter -Methoden -Injektion usw. Sie sollten ein relativ einfaches Verständnis der Abhängigkeitsinjektion haben. Was die Abhängigkeitsinjektion benötigt, hat der obige Artikel dies bereits sehr deutlich erläutert. Um die Kopplung zwischen Komponenten im Code zu verringern, sollten wir zunächst einfache Beispiele verwenden, um die Vorteile der Abhängigkeitsinjektion gegenüber der Verwaltung von Objekten selbst intuitiv zu erleben - -
öffentliche Klasse Man implementiert menschliches {privates QQCar -Auto; public Man () {this.car = new qqcar (); } @Override public void xiabibi () {} public void drevecar () {car.drive (); }}Es gibt zwei Implementierungen von Interface Car: Mercedes-Benz und QQ CAR. In den obigen Codes von Man und QQCAR erstellte der erfahrene Fahrer nur QQ -Autoobjekte über den Konstruktor, sodass er nur das QQ -Auto fahren kann. Was sollte der erfahrene Fahrer also tun, wenn er Mercedes-Benz fahren möchte? Bitten Sie ihn, das Mercedes-Benz-Objekt nachzubilden? Ein solcher stark gekoppelter Code scheint hilflos zu sein, daher werden wir einige Verbesserungen des obigen Codes durch Injektion von Objekten vornehmen:
öffentlicher Klasse Mann implementiert ein Mensch {Privatauto; öffentlicher Mann (Auto Car) {this.car = car; } @Override public void xiabibi () {} public void drevecar () {car.drive (); }}Die obigen Codes blockiert bestimmte Objekte, die auf polymorphen Eigenschaften durch Konstruktor -Grenzflächeneinspritzung basieren, damit erfahrene Treiber alles fahren können, was sie wollen. Dies ist der Vorteil der Abhängigkeitsinjektion.
AOP (Aspektorientierte Programmierung), Gesichtsorientierter Programmierung. Wenn wir in der täglichen Entwicklung eine bestimmte Geschäftsfunktion ausfüllen, schreiben wir viel Code. Wenn wir den Code endlich optimieren, stellen wir fest, dass der Code, der das Unternehmen tatsächlich vervollständigt, nur zwei Sätze beträgt und der Rest für diesen Teil des Geschäfts nicht sehr relevant ist. Es wird vollständig extrahiert, um einen bestimmten Technologiecode zu implementieren. Natürlich werden wir es in eine Werkzeugkurs extrahieren, damit alles, was Sie verwenden, in Ordnung ist, wenn Sie einfach die Werkzeugmethode aufrufen. Schauen wir es uns etwas höher an. Zusätzlich zum Abschluss der verwandten Geschäftsfunktionen umfassen die funktionalen Komponenten jedes Geschäftsmoduls zusätzliche Vorgänge wie Protokolle, Transaktionen und Sicherheitskontrolle. Dies sind nicht die Kernfunktionen des Moduls, aber sie sind unverzichtbar. Wenn diese zusätzlichen Funktionen dem Code hinzugefügt werden, erscheint jede Komponente des Geschäftssystems zu wiederholend und lässt die Geschäftsordnung verwirrend und nicht rein genug erscheinen. Zu diesem Zeitpunkt fragen Sie Gott, können sich Ihre Geschäftsordnung nur auf die Umsetzung des Geschäfts konzentrieren und irrelevante Dinge wie Protokolle, Transaktionen usw. ignorieren? Oh, Gott sagte, es sei in Ordnung, also gab es AOP. Wenn der Zweck der Abhängigkeitsinjektion darin besteht, kooperative Komponenten in einem relativ lockeren Kopplungszustand zu halten, trennt AOP die Funktionen, die sich über die Anwendung ausbreiten, um wiederverwendbare Komponenten zu bilden. In Laien sind Protokolle, Transaktionen usw. wiederverwendbare Komponenten. Wir können die Protokolle, Transaktionen, Sicherheit und andere Funktionscodes, die in verschiedenen Teilen der Geschäftsordnung verstreut sind, vollständig extrahieren und zu einer separaten Toolkomponente werden. Deklarieren Sie es in der Konfiguration von Spring als funktionaler Abschnitt und geben Sie die Feder an, wo und wann Sie diese wiederverwendbaren Komponenten verwenden möchten. Dies ist meine einfache Interpretation des Gesichts-orientierten Abschnitts. Dieser Artikel ist nur eine Einführung, daher erklärt der Blogger das Konzept kurz und erstellt keinen spezifischen Code- oder Konfigurationsimplementierungen. Es wird in nachfolgenden Blog -Posts präsentiert. Willkommen, einen Blick darauf zu werfen.