Heim  >  Artikel  >  Web-Frontend  >  Verständnis der aspektorientierten Programmierung (AOP)_Javascript-Kenntnisse

Verständnis der aspektorientierten Programmierung (AOP)_Javascript-Kenntnisse

WBOY
WBOYOriginal
2016-05-16 16:01:301040Durchsuche

Beim Schreiben von herkömmlichem Geschäftslogik-Verarbeitungscode führen wir normalerweise mehrere Dinge aus: Protokollierung, Transaktionskontrolle, Berechtigungskontrolle usw. und schreiben dann den Kerngeschäftslogik-Verarbeitungscode. Als ich mit dem Schreiben des Codes fertig war und zurückblickte, musste ich feststellen, dass von den Hunderten von Codezeilen in Yangyangshasha nur wenige tatsächlich für die Verarbeitung der Kerngeschäftslogik verwendet wurden, wie in Abbildung 6-4 dargestellt. Methode um Methode, Klasse um Klasse vergingen so viele Jahre voller Hilflosigkeit und Bedauern. Das ist in Ordnung, aber wenn am Ende des Projekts plötzlich entschieden wird, dass große Änderungen an der Berechtigungssteuerung erforderlich sind, müssen Tausende von Methoden nacheinander „besucht“ werden, und der Schmerz wird „schlimmer“ sein.


Wenn alle gemeinsamen Codes in den vielen Methoden in Abbildung 6-4 extrahiert und irgendwo zur zentralen Verwaltung platziert werden können und der Container diese gemeinsamen Codes dann während einer bestimmten Laufzeit dynamisch miteinander verknüpfen kann, können mindestens zwei Probleme gelöst werden :

Beim Schreiben spezifischer Methoden zur Verarbeitung der Geschäftslogik müssen sich Java EE-Programmierer nur um die Verarbeitung der Kerngeschäftslogik kümmern, was nicht nur die Arbeitseffizienz verbessert, sondern auch Codeänderungen einfach und elegant macht.

Da bei zukünftigen Wartungsarbeiten der Geschäftslogikcode und der gemeinsame Code getrennt gespeichert werden und der gemeinsame Code zentral gespeichert wird, werden die Wartungsarbeiten einfach und unkompliziert.

Aspektorientierte Programmierung AOP-Technologie wurde entwickelt, um dieses Problem zu lösen, wie in Abbildung 6-5 dargestellt, das eine allgegenwärtige allgemeine Funktion darstellt, wie z. B. den Protokollaspekt, den Berechtigungsaspekt und den Transaktionswartezustand .

Nehmen wir den AOP-Implementierungsprozess der Benutzerverwaltungs-Geschäftslogikkomponente UserService (siehe Abbildung 6-6) als Beispiel, um das Implementierungsprinzip der AOP-Technologie eingehend zu analysieren. Die AOP-Technologie basiert auf dem Reflexionsmechanismus und dem dynamischen Proxy-Mechanismus der Java-Sprache. Wenn die Geschäftslogikkomponente ausgeführt wird, erstellt der AOP-Container dynamisch ein Proxy-Objekt, das der Benutzer aufrufen kann. Dieses Proxy-Objekt hat den Aspekt erfolgreich auf den Verbindungspunkt der Zielmethode gemäß der Absicht des Java EE-Programmierers zugeschnitten Stellen Sie sicher, dass die Funktion des Aspekts mit dem Verbindungspunkt der Zielmethode übereinstimmt. Die Funktionen der Geschäftslogik werden gleichzeitig ausgeführt. Im Prinzip ruft der Aufrufer direkt das vom AOP-Container dynamisch generierte Proxy-Objekt auf. Anschließend ruft das Proxy-Objekt das Zielobjekt auf, um die ursprüngliche Geschäftslogikverarbeitung abzuschließen, und das Proxy-Objekt verfügt über synthetisierte Aspekte und Geschäftslogikmethoden.

Jetzt werden einige Konzepte in Abbildung 6-6 wie folgt erklärt.

Aspekt: ​​Tatsächlich handelt es sich um die Realisierung gemeinsamer Funktionen. Wie Protokollaspekte, Berechtigungsaspekte, Transaktionsaspekte usw. In tatsächlichen Anwendungen handelt es sich normalerweise um eine gewöhnliche Java-Klasse, die die Implementierung allgemeiner Funktionen speichert. Der Grund, warum sie vom AOP-Container als Aspekt erkannt werden kann, wird in der Konfiguration angegeben.

Hinweis: Es ist die konkrete Umsetzung von Aspekten. Unter Verwendung der Zielmethode als Bezugspunkt kann sie je nach Platzierungsort in fünf Typen unterteilt werden: Vorbenachrichtigung (Before), Nachbenachrichtigung (AfterReturning), Ausnahmebenachrichtigung (AfterThrowing), Endbenachrichtigung (After) und Umgebung Benachrichtigung (rund). In tatsächlichen Anwendungen handelt es sich normalerweise um eine Methode in der Aspektklasse. Die spezifische Art der Benachrichtigung wird auch in der Konfiguration angegeben.

Joinpoint: Dies ist der Ort, an dem Aspekte während des laufenden Programmprozesses eingefügt werden können. Zum Beispiel Methodenaufruf, Ausnahmeauslösung oder Feldänderung usw., Spring unterstützt jedoch nur Verbindungspunkte auf Methodenebene.

Punktschnitt: Wird verwendet, um zu definieren, in welche Verbindungspunkte die Benachrichtigung schneiden soll. Unterschiedliche Benachrichtigungen müssen normalerweise in unterschiedliche Verbindungspunkte eingeschnitten werden. Diese genaue Übereinstimmung wird durch den regulären Ausdruck des Einstiegspunkts definiert.

Ziel: Es sind die Objekte, die im Begriff sind, in den Aspekt einzutreten, d. h. die Objekte, die benachrichtigt werden. In diesen Objekten bleibt nur der saubere Kerngeschäftslogikcode übrig, und alle allgemeinen Funktionscodes warten darauf, dass der AOP-Container eingefügt wird.

Proxy-Objekt (Proxy): Ein Objekt, das dynamisch erstellt wird, nachdem Benachrichtigungen auf das Zielobjekt angewendet wurden. Es kann einfach verstanden werden, dass die Funktion des Proxy-Objekts der Kerngeschäftslogikfunktion des Zielobjekts plus der gemeinsamen Funktion entspricht. Das Proxy-Objekt ist für den Benutzer transparent und ein Produkt des laufenden Programmprozesses.

Weben: Der Prozess des Anwendens von Aspekten auf das Zielobjekt, um ein neues Proxy-Objekt zu erstellen. Dieser Prozess kann während des Kompilierungszeitraums, des Klassenladezeitraums und der Laufzeit stattfinden. Natürlich haben unterschiedliche Auftrittspunkte unterschiedliche Voraussetzungen. Wenn es beispielsweise während der Kompilierung auftritt, ist ein spezieller Compiler erforderlich, der diese AOP-Implementierung unterstützt. Wenn es während des Klassenladens auftritt, ist ein spezieller Klassenlader erforderlich, der die AOP-Implementierung nur unterstützt. Wenn es während der Laufzeit auftritt, kann es direkt übergeben werden Java-Sprachreflexionsmechanismus und dynamischer Proxy-Mechanismus zur Erzielung einer dynamischen Implementierung.

Das Folgende ist eine Ergänzung:

AOP ist die Abkürzung für Aspect Oriented Programming, was bedeutet: Aspektorientierte Programmierung, eine Technologie, die eine einheitliche Wartung von Programmfunktionen durch dynamische Agenten vor der Kompilierung und Laufzeit erreicht.

AOP und OOP sind zwei Designideen für unterschiedliche Bereiche.

OOP (objektorientierte Programmierung) kapselt abstrakt die Entitäten und ihre Attribute und Verhaltensweisen des Geschäftsverarbeitungsprozesses, um eine klarere und effizientere Aufteilung logischer Einheiten zu erhalten.

AOP extrahiert Aspekte im Geschäftsverarbeitungsprozess. Es befasst sich mit einem bestimmten Schritt oder einer bestimmten Phase im Verarbeitungsprozess, um den Isolationseffekt einer geringen Kopplung zwischen verschiedenen Teilen im logischen Prozess zu erzielen.

Wir können AOP und OOP einfach aus der obigen wörtlichen Bedeutung verstehen, und es ist keine Übertreibung, das folgende Verständnis zu verwenden:

OOP ist eigentlich eine Kapselung der Eigenschaften und Verhaltensweisen von Objekten, und AOP kann nicht darüber sprechen. Allerdings befasst sich AOP mit bestimmten Schritten und Phasen und extrahiert Aspekte daraus. Wenn wiederholtes Betriebsverhalten vorliegt, kann AOP diese extrahieren und dynamische Agenten verwenden, um eine einheitliche Wartung der Programmfunktionen zu erreichen. Dies ist möglicherweise zu implizit, wenn es um Berechtigungsbeurteilung, Protokollierung usw. geht. Wenn wir einfach OOP verwenden, wie sieht es dann mit der Berechtigungsbeurteilung aus? Vor jedem Vorgang eine Berechtigungsbeurteilung hinzufügen? Was ist mit der Protokollierung? Protokolle am Anfang, am Ende und an Ausnahmen jeder Methode manuell hinzufügen? Wenn Sie AOP verwenden, um diese wiederholten Vorgänge mithilfe eines Proxys abzuschließen, können Sie daher die Kopplung zwischen verschiedenen Teilen im logischen Prozess reduzieren. Die beiden ergänzen sich in ihren Stärken und ergänzen sich gegenseitig.

Erfahren Sie mehr über einige AOP-Konzepte:

•Aspekt: ​​Die Modularisierung eines Anliegens. Die Umsetzung dieses Anliegens kann auch objektübergreifend sein. Das Transaktionsmanagement ist ein gutes Beispiel für ein übergreifendes Anliegen in J2EE-Anwendungen. Aspekte werden mit Spring's Advisor oder Interceptor implementiert.
•Joinpoint: Ein klarer Punkt in der Programmausführung, z. B. ein Methodenaufruf oder das Auslösen einer bestimmten Ausnahme.
•Benachrichtigung (Hinweis): An einem bestimmten Verbindungspunkt die vom AOP-Framework ausgeführte Aktion. Zu den verschiedenen Arten von Benachrichtigungen gehören Benachrichtigungen vom Typ „In der Nähe“, „Vorher“ und „Wirft“. Benachrichtigungstypen werden unten erläutert. Viele AOP-Frameworks, einschließlich Spring, verwenden Interceptoren als Benachrichtigungsmodelle und pflegen eine Interceptor-Kette „um“ den Verbindungspunkt.
•Pointcut: Gibt eine Sammlung von Verbindungspunkten an, an denen eine Benachrichtigung ausgelöst wird. Das AOP-Framework muss es Entwicklern ermöglichen, Einstiegspunkte beispielsweise mithilfe regulärer Ausdrücke anzugeben.
•Einführung: Methoden oder Felder zur benachrichtigten Klasse hinzufügen. Spring ermöglicht die Einführung neuer Schnittstellen zu jedem empfohlenen Objekt. Sie können beispielsweise einen Import verwenden, um jedes Objekt dazu zu bringen, die IsModified-Schnittstelle zu implementieren, um das Caching zu vereinfachen.
•Zielobjekt: Das Objekt, das den Verbindungspunkt enthält, auch bekannt als benachrichtigtes oder Proxy-Objekt.
•AOP-Proxy: Ein vom AOP-Framework erstelltes Objekt, einschließlich Benachrichtigungen. Im Frühjahr kann der AOP-Proxy ein dynamischer JDK-Proxy oder ein CGLIB-Proxy sein.
•Weben: Elemente zusammenfügen, um ein bestimmtes Objekt zu schaffen. Dies kann zur Kompilierungszeit (z. B. mit dem AspectJ-Compiler) oder zur Laufzeit erfolgen. Spring schließt wie andere reine Java-AOP-Frameworks das Weben zur Laufzeit ab.
Der AOP-Proxy in Spring wird vom IoC-Container von Spring generiert und verwaltet, und seine Abhängigkeiten werden ebenfalls vom IoC-Container verwaltet. Wie Springs AOP im Projekt implementiert wird, wird im nächsten Blog die Protokollierung als Beispiel zum Lernen verwenden.

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