English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Diese Anwendung ist in der Regel in mehreren Schichten entwickelt. Ein typisches Java-Anwendung hat die folgenden Ebenen:
WebSchicht: Es verwendet REST oder Web-Anwendungen, umDienstAspekt GeschäftsEbene: Es realisiert die Anwendung derGeschäftslogikAspekt Datenlayer: Es realisiert die Anwendung derPersistenzlogikAspekt
Die Verantwortlichkeiten jeder Ebene sind unterschiedlich, aber es gibt einige gängige Aspekte, die für alle Ebenen gelten sind Logik, Sicherheit, Validierung, Caching und so weiter. Diese gängigen Aspekte werden cross-cutting Interessen.
Wenn wir diese Interessen in jeder Ebene einzeln implementieren, wird der Code schwieriger zu warten. Um dieses Problem zu überwinden, Aspect-Oriented Programming(AOP) bietet eine Lösung für cross-cutting Probleme.
Sehen Sie die cross-cutting Interessen als Aspekt. Definiert den Einstichpunkt, um anzuzeigen, wo der Aspekt angewendet werden muss.
Es stellt sicher, dass cross-cutting Interessen in einem kohärenten Code-Component definiert werden.
AOP (Aspect-Oriented Programming)Es ist eine Methode, indem es CGLIB-Proxy.Trennung zur Erhöhung des modularisierten Programmiermodells. Diese cross-departmentalen Interessen unterscheiden sich von der Hauptgeschäftslogik. Wir können andere Verhaltensweisen zu bestehendem Code hinzufügen, ohne den Code selbst zu ändern.
Der AOP-Framework von Spring hilft uns, diese cross-cutting Interessen zu realisieren.
Mit AOP können wir an einem Ort. Wir können frei definieren, wie und wo diese Funktion angewendet wird, ohne die Klasse zu ändern, in der neue Funktionen hinzugefügt werden. Jetzt können Querschnittsinteressen in spezielle Klassen modularisiert werden, die Zweitens enthält der Geschäftsmodul nur den Hauptfokus der Code. Sekundäre Interessen sind inAspekt
verwenden Aspekte habenZwei
Vorteile: Zuerst konzentriert sich die Logik jeder Interessen jetzt an einem Ort, anstatt sich über die gesamte Codebasis zu verteilen.Zweitens enthält der Geschäftsmodul nur den Hauptfokus der Code. Sekundäre Interessen sind inAspekt
. Jeder Aspekt hat Verantwortlichkeiten zu erfüllen, dieAdvice
Die Vorteile von AOP Es wird rein in Java implementiert. Es erfordert keinen speziellen Kompilationsprozess. Es unterstützt nur Methodenausführungsschneidepunkte. nur Runtime-Weaving. JDK-Dynamischer Proxyund Es gibt zwei Arten von AOP-Proxy:
Querschnittsinteressen
Aspect: umschließtEin Aspekt ist ein Modul, das AOP-Begriffeundadvicepointcutsverwenden und-crosscutting Es können viele Aspekte geben. Wir können Aspekte mit @Aspect Pointcut: mit Annotationen versehene reguläre Klassen, um Aspekte zu realisieren.Ein Schneidepunkt ist ein Ausdruck, der einen oder mehrere Join points auswählt, an denen Advice ausgeführt wird. Wir könnenbeforeexpressionsMuster AspectJ Definiert den Schneidepunkt. Es verwendet verschiedene Arten von Ausdrücken, die mit dem Join point übereinstimmen. In der Spring Framework wird Schneidepunkt-Präzisierungssprache. Join point: Ein Join point ist ein Punkt in der Anwendung, an dem Advice angewendet wirdAOP-FrontendPunkte setzen. Oder es ist eine spezifische Ausführungsinstanz von Advice. In AOP kann ein Join pointmethodenausführung, Fehlerbehandlung, Änderung von Objektvariablenwerten Advice: oderAdvice sind diejenigen, die wir vor der MethodenausführungbeforeoderafterMaßnahmen. Diese Aktion ist ein Abschnitt von Code, der während der Programmausführung aufgerufen wird. Der Spring AOP-Framework hatTypen von Advice gibt es fünf in Advicebefore, after, after-returning, nach-throwing undAround-Advice. Es ist für spezifischeJoin-point-Advice. Wir werden diese Advice in diesem Abschnitt weiter diskutieren. Zielobjekt: 一个应用了Advice的对象称为Zielobjekt。目标对象始终是proxiedDies bedeutet, dass bei der Laufzeit eine Unterklasse erstellt wird, die den Zielmethoden überlagert und Advice enthält. Weaving: Das ist das Verknüpfen von Aspekten mit anderen Anwendungstypen.Aspekte verknüpfenVorgang. Wir könnenbei der Laufzeit, im LadezeitpunktundBei der Kompilierungzu weben.
Proxy: Es ist das Objekt, das nach der Anwendung von Advice auf das Zielobjekt erstellt wird und als Proxy . Spring AOP implementiert JDK-Dynamischer Proxy, um Proxy-Klassen zu erstellen, indem Zielklassen und Advice verwendet werden. Diese werden als AOP Proxy-Klassen bezeichnet.
Unterschiede zwischen AOP und OOP:
AOP | OOP |
Aspect: Ein Code-Unit, der Einstichpunkte, Advice und Eigenschaften verpackt. | Class: Ein Code-Unit, der Methoden und Eigenschaften verpackt. |
Pointcut: Es definiert eine Gruppe von Einstiegspunkten für die Ausführung von Advice. | Method signature: . Es definiert den Einstiegspunkt für die Ausführung des Methodenkörpers. |
Advice: Dies ist die Implementierung von Querschnittsinteressen. | Method bodies: Es ist die Implementierung von Geschäftslogikproblemen. |
Waver: Er konstruiert Code (Quell- oder Objektcode) mithilfe von Advice. | Compiler: Er wandelt Quellcode in Zielcode um. |
Unterschied zwischen AOP und OOP:
Spring AOP | AspectJ |
Ein separater Kompilationsprozess ist erforderlich. | Es benötigt den AspectJ-Compiler. |
Es unterstützt nur Einstichpunkte für Methodenausführung. | Es unterstützt alle Einstichpunkte. |
Es kann auf Beans im Spring Container implementiert werden. | Es kann auf allen Domänenobjekten implementiert werden. |
Es unterstützt nur methodische Verflechtung. | Es kann Felder, Methoden, Konstruktoren, statische Initialisierer, endgültige Klassen und mehr beeinflussen. |
AOP Advice gibt es fünf Typen, wie folgt:
Before Advice After Advice Around Advice Nach dem Werfen Nach dem Rückgeben
Before Advice: Advice, die vor dem Verbindungspunkt ausgeführt werden, werden vor der Benachrichtigung aufgerufen. Wir verwenden @Before Anmerkungen kennzeichnen Advice als Before-Benachrichtigung.
After Advice: Advice, die nach dem Verbindungspunkt ausgeführt werden, werden als after notification bezeichnet. Wir verwenden @After Anmerkungen kennzeichnen Advice als After-Benachrichtigung.
Around Advice: Advice, die vor und nach dem Verbindungspunkt ausgeführt werden, sind
Nach dem Werfen: Advice, die bei Ausnahmebehandlung am Verbindungspunkt ausgeführt wird.
Nach dem Zurückkehren: Advice, die ausgeführt wird, wenn der Methodenaufruf erfolgreich ist.
Bevor wir AOP in der Anwendung implementieren, müssen wir im pom.xml-Datei hinzufügen Spring AOP Abhängigkeiten.
Spring Boot Starter AOP ist ein Abhängigkeitspaket, das Spring AOP und AspectJ bereitstellt. AOP bietet grundlegende AOP-Funktionen, während AspectJ ein vollständiges AOP-Framework bietet.
<Abhängigkeit> <GroupId>org.springframework.boot</GroupId> <ArtifactId>spring-Boot-Starter-aop</ArtifactId> <Version>2.2.2.RELEASE</Version> </Abhängigkeit>
In dem nächsten Abschnitt werden wir verschiedene Advice in der Anwendung implementieren.