Spring ist ein Open-Source-Framework, das hauptsächlich zwei Dinge implementiert: IOC (Kontrollinversion) und AOP (sachlichorientierte Programmierung).
IOC
Kontrollinversion, auch als Abhängigkeitsinversion bezeichnet.
Die sogenannte Abhängigkeit aus der Perspektive des Programms bedeutet, dass beispielsweise A, wenn A auf die Methode von B aufrufen will, dann von B. abhängt. Wenn A, wenn A verwenden will, hängt A von B. ab. So erhalten Sie B -Instanzen (natürlich gibt es verschiedene Designmuster, mit denen Sie B -Instanzen wie Fabriken, Locator usw. erhalten können) und dann das B -Objekt aufrufen können. Daher bedeutet es, nicht invertiert zu werden, dass A vor der Verwendung von B aktiv B erhalten muss; Zu diesem Zeitpunkt sollten Sie die Bedeutung von Inverted verstehen. Invertieren bedeutet, dass A, wenn A anrufen will, nicht aktiv B erhalten muss, andere B, aber automatisch B an die Tür liefern.
Die sogenannte Kontrollumkehr ist die Übertragung der Kontrollleistung. Um ein Beispiel zu geben: Wenn eine Person unter normalen Umständen fahren möchte, sollte die Person alleine nach dem Auto suchen. Nachdem die Kontrollumkehr erreicht ist, muss die Person nicht überlegen, woher das Auto kommt, einfach direkt fahren, und die Person überträgt die Kontrolle des Autos an andere Objekte. Erleben Sie den folgenden Code
Definieren Sie ein Schnittstellenwagen
public interface Car {void go ();}Definieren Sie zwei Arten von Autos
öffentliche Klasse Benz implementiert Car {public void go () {System.out.println ("Benz Go ..."); }} public class bmw implementiert car {public void go () {System.out.println ("bmw go ..."); }}Unten ist ein Fahren
Personalklasse Person {Car Car = New Benz (); void drivecar () {System.out.println ("begin Drive"); Ladung(); }}Dies ist ein normaler Codekontrollprozess. Wenn Sie fahren möchten, müssen Sie ein Auto selbst instanziieren. In diesem Fall kann diese Person jedoch nur ein Auto fahren. Wie kann diese Person in der Lage sein, verschiedene Autos zu fahren? Es ist, Kontrollumkehr zu erreichen. Mit anderen Worten, wenn die Person das Auto selbst nicht mehr instanziiert, wie kann die Person das Objekt des Autos bekommen? Wir können die Abhängigkeitsinjektion (kurz DI) verwenden, um das Objekt des Autos zu erhalten, wodurch die Kontrollinversion erreicht wird. Wir müssen also die Personklasse ändern
Personalklasse Person {Car Car = null; öffentliche Person (Auto Car) {this.car = Car; } void DriveCar () {System.out.println ("Beginn Drive"); Ladung(); }}Die aktuelle Personklasse instanziiert nicht mehr das Objekt des Autos selbst, sondern verwendet den Konstruktor, um das Objekt des Autos zu erhalten. Daher kann diese Klasse verschiedene Autos fahren, solange das Auto die Automobiloberfläche implementiert. Sehen Sie, wie man Personenklasse benutzt
public static void main (String [] args) {Person p = neue Person (neuer Benz ()); p.Drivecar ();}Die Personklasse kann mehr als eine Art von Auto fahren, solange Sie sie durch den Konstruktor eingeben. In diesem Beispiel ist das Autoobjekt die Abhängigkeit der Personklasse. Wenn wir die Personenklasse instanziieren, ist die Abhängigkeitsinjektion eine Abhängigkeitsinjektion. Unsere Personklasse implementiert somit Kontrollinversion.
Was genau kehrt die Steuerung um? Es gibt ein Sprichwort: Die sogenannte Kontrollinversion ist der Prozess des Erhaltens von Objektabhängigkeiten. Nachdem die Kontrollrechte rückgängig gemacht wurden, ändert sich der Prozess des Erhaltens abhängiger Objekte von seiner eigenen Management zu Injektion durch den IOC -Container.
Feder implementiert Abhängigkeitsinjektion
In der obigen Codezeile, Person p = neue Person (neuer Benz ()), wir haben manuell ein Benz () -Objekt und in die Person in der Person injizieren. Der Frühling tut dies nicht, weil der Frühling der Ansicht ist, dass Ihre Codezeile eine bestimmte Benz -Klasse instanziiert. Wenn Sie hier in Zukunft eine BMW -Klasse instanziieren möchten, müssen Sie den Code nicht ändern? Dann schreibe ich es einfach in die Konfigurationsdatei. Selbst wenn Sie in Zukunft aufmerksam sind, müssen Sie den Code zumindest nicht ändern, sodass die folgende Konfiguration verfügbar ist.
<beans> <bean id = "car" /> <bean id = "person"> <property name = "car" ref = "car" /> <bean /> < /beans>
Dann liefert die Feder einige Mechanismen. Wenn das Objekt der Personenklasse aus der Konfigurationsdatei erhalten wird, wird das von ihr gelieferte Autoobjekt zusammengesetzt, und das Personobjekt muss sich keine Sorgen darüber machen, in welche bestimmte Klasse übergeben wird. Daher unternimmt Spring als IOC -Framework hauptsächlich zwei Schritte: Erstellen eines Objekts und Zusammenstellung der Beziehung zwischen Objekten.
AOP
AOP (Aspektorientierte Programmierung) ist eine Aspekt-orientierte Programmierung. Lassen Sie mich Ihnen ein Beispiel dafür geben, welcher Aspekt ist. In einem vollständigen Website -Projekt müssen viele Module protokolliert werden, viele Orte müssen angemeldet werden, und viele Orte müssen eine Ausnahmehandhabung sein. Protokollierung, Protokollierung, Ausnahmebehandlung und andere Logik sind die sogenannten Abschnitte. Unter der Annahme, dass ich die Logik dieser Abschnitte überall schreibe, kann die Wartbarkeit des Codes vorgestellt werden. AOP soll die Trennung von Bedenken erreichen, die Logik dieser Abschnitte extrahieren und in getrennte Klassen schreiben und dann einen Weg finden, sie mit allgemeinen Modulen zusammenzustellen, um auszuführen. Gewöhnliche Module wissen nicht einmal, dass sie sie mit Abschnitten und Abschnitten zusammengestellt haben.
Das Ziel der Aspekt-orientierten Programmierung ist es, den Fokus zu trennen. Was ist ein Fokus? Es ist das, was Sie tun müssen, es ist Fokus. Wenn Sie ein junger Mann sind und keine Lebensziele haben, müssen Sie nur Kleidung tragen und essen, und Sie wissen nur eine Sache, die Sie den ganzen Tag spielen können! Also, jeden Tag, wenn Sie Ihre Augen öffnen, möchten Sie einfach nach dem Abendessen spielen (Dinge, die Sie tun müssen), aber vor dem Spielen müssen Sie auch Kleidung tragen, Schuhe tragen, Quilts falten, kochen usw. Diese Dinge sind Ihr Fokus, aber Sie möchten nur essen und spielen, also was sollten Sie tun? All diese Dinge bleiben anderen überlassen. Bevor Sie zum Esstisch gehen, gibt es einen besonderen Diener A, mit dem Sie sich anziehen können, Diener B, mit dem Sie Schuhe anziehen können, Diener C, um Ihnen zu helfen, den Quilt zu falten, Diener C, um Ihnen beim Kochen zu helfen, und dann mit dem Essen und Spielen (dies ist Ihr Tag). Nachdem Sie Ihren Tag beendet haben, kommen Sie zurück und eine Reihe von Dienern hilft Ihnen dabei, dies und das zu tun, und dann ist der Tag vorbei!
Der Vorteil von AOP besteht darin, dass Sie nur Ihr wichtiges Geschäft machen müssen und andere Ihnen bei anderen Dingen helfen. Vielleicht eines Tages, wenn Sie nackt laufen möchten und keine Kleidung tragen möchten, dann feuern Sie einfach Ihren Diener A! Vielleicht möchten Sie eines Tages etwas Geld mitbringen, bevor Sie ausgehen, damit Sie einen weiteren Diener einstellen können, um Ihnen zu helfen, Geld zu bekommen! Das ist AOP. Jeder erfüllt seine eigenen Pflichten und kombiniert flexibel, um eine konfigurierbare, steckbare Programmstruktur zu erreichen.
Aus der Sicht des Frühlings besteht der größte Zweck von AOP darin, Transaktionsmanagementfunktionen bereitzustellen. Transaktionsmanagement ist ein Fokus. Ihr Unternehmen soll auf die Datenbank zugreifen, und Sie möchten keine Transaktionen verwalten (zu ärgerlich). Daher startet Spring die Transaktion automatisch, bevor Sie auf die Datenbank zugreifen und die Transaktionen nach dem Zugriff auf die Datenbank automatisch verpflichten/zurückrollen!
Schauen Sie sich den folgenden Code an, es spielt keine Rolle, ob Sie ihn nicht verstehen
<bean id = "publication" /> <AOP: config> <AOP: Aspekt ref = "publication"> <aop: pointcut id = "Performance" Expression = "Ausführung (* com.springInaction.springidol.performer.Perform (..)") " /> <AOP: vor pointcut-ref =" methode "methods" /> <! <AOP: Vor dem Pointcut-ref = "Performance" methode = "turnoffcellphones" /> <!-<co id = "co_refpointcut" />-> <AOP: After-Rückgang Pointcut-ref = "Performance" methode = "appaud" /> <! method = "DemandRefund"/> <!-<co id = "co_refpointcut"/>-> </aoP: Aspekt> </AOP: config>
Die ungefähre Bedeutung der obigen Konfiguration ist, dass der Proxy im Spring -Framework die Zielmethode (Performer.Perform ()) abfängt, wenn die Methode der Performer.Perform auftritt. Führen Sie vor der Ausführung der Zielmethode zunächst die Publikum.Takeseats () und audienceturn.offcellphones () -Methoden aus und führen Sie dann die Zielmethode aus. Wenn die Zielmethode ausgeführt wird und zurückgibt, führen Sie die Methode von audienceturn.applaud () aus. Wenn die Zielmethode leider eine Ausnahme ausgelegt hat, wird der Agent die methode von audienceturn.Demandrefund () ausgeführt. Kurz gesagt, die Proxy -Klasse von Spring überwacht die Ausführung der Zielmethode in allen Aspekten, während sich die Zielmethode nur auf ihre eigenen Angelegenheiten konzentriert und nicht einmal die Existenz der Proxy -Klasse kennt.
Zusammenfassen
In dem obigen dreht sich alles um ein einfaches Verständnis der IOC-, AOP- und Code -Beispiele von Spring. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf diese Seite verweisen:
Detaillierte Einführung in die Implementierung der IOC -Simulation von Spring
Spring AOP Intercept-Drei-Möglichkeiten zur Implementierung automatischer Proxy-detaillierter Erläuterung
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!