Überblick
Das Spirng-AOP-Modul ist das Kernmodul im Feder-Framework. Obwohl der Frühlings -IOC -Behälter nicht auf AOP beruht, bietet AOP eine leistungsstarke und flexible Lösung für die Implementierung von IOC.
Im Frühjahrsgerüst wird AOP hauptsächlich für zwei Zwecke verwendet:
Aus funktionaler Perspektive kann AOP als Ergänzung zur OOP -Programmiermethode angesehen werden, die eine andere Art und Weise für die Code- oder Systemorganisation bietet. Das Kernkonzept in OOP ist die Klasse, und in AOP ist Aspekt.
Das Spirng-AOP-Modul ist das Kernmodul im Feder-Framework. Obwohl der Frühlings -IOC -Behälter nicht auf AOP beruht, bietet AOP eine leistungsstarke und flexible Lösung für die Implementierung von IOC.
Im Frühjahrsgerüst wird AOP hauptsächlich für zwei Zwecke verwendet:
Die Feder -AOP wird in reinem Java implementiert und erfordert keine spezielle Kompilierungsverarbeitung und erfordert keine Kontrolle über die Hierarchie des Klassenladers, sodass sie für Servlet -Container und andere Anwendungsserver verwendet werden kann.
Spring AOP unterstützt derzeit nur Schalten oder Abfangen auf Methodenebene, und das Attribut-Interception wird jetzt nicht unterstützt. Wenn Sie Attribute abfangen möchten, können Sie in Betracht ziehen, die Aspekt -J -Sprache zu verwenden.
Frühlings -AOP wird anders als die meisten anderen AOP -Frameworks verwendet. Sein Hauptzweck ist es nicht, eine große und umfassende Reihe von AOP -Implementierungen bereitzustellen, sondern verschiedene AOP -Implementierungen zu integrieren und mit Spring -IOC zusammenzuarbeiten, um einige häufige Probleme zu lösen.
Es ist zu beachten, dass einige feinkörnige Ratschläge (z. B. Domänenmodell), Frühlings-AOP häufig keine gute Unterstützung bieten, und dieses Szenario betrachtet Aspekt J. immer noch. Trotzdem kann der starke Mechanismus von Frühling AOP im Allgemeinen die Probleme in den meisten Szenarien immer noch lösen.
Wie sollten wir also Frühlings -AOP und Aspektj ansehen und den Originaltext der offiziellen Dokumente von Spring zitieren:
Frühlings -AOP wird niemals Schwierigkeiten haben, mit Aspektj zu konkurrieren, um eine umfassende AOP -Lösung zu bieten. Wir glauben, dass sowohl Proxy-basierte Frameworks wie Frühlings-AOP als auch ausgewachsene Frameworks wie Aspektj wertvoll sind und dass sie vollständig und nicht im Wettbewerb sind. Frühling integriert nahtlos Frühlings-AOP und IOC in Aspektj, um alle Verwendungen von AOP zu ermöglichen, um innerhalb einer konsistenten Spring-basierte Anwendungsarchitektur versorgt zu werden. Diese Integration wirkt sich nicht auf die Feder AOP-API oder die AOP-Allianz-API aus: Frühlings-AOP bleibt rückwärtskompatibel.
In allen Feder-Framework-Modul-Designs ist einer der Kernkenntnisse, an die immer eingehalten wird, nicht invasiv.
Bei der Verwendung von Frühlings -AOP zwingen wir uns daher nicht, bestimmte Klassen oder Schnittstellen in die Geschäftsordnung einzuführen, wodurch der Code sauber und entkoppelt bleibt. Spring bietet jedoch auch eine weitere Option. Wenn ein bestimmtes Szenario vorhanden ist, können Sie Frühlings -AOP in Ihrem Code direkt einführen. Fast alle Module in Spring Frameworks bieten Ihnen eine Vielzahl von Auswahlmöglichkeiten in der Art und Weise, wie sie verwendet werden, damit Benutzer einen Weg auswählen können, der besser für ihre Szenarien geeignet ist. Verwenden Sie Aspektj- oder Feder -AOP, verwenden Sie Annotation oder XML -Konfigurationsmethode, hängt von U. ab.
Nachdem wir die ursprünglichen Absichts- und Nutzungsszenarien von Frühlings -AOP verstanden haben, schauen wir uns das allgemeine Implementierungsprinzip an
Die meisten Probleme in der Software -Welt können durch Hinzufügen einer Ebene gelöst werden.
Die hier erwähnte Ebene ist natürlich in einem breiten Sinne, was eine Abstraktion oder ein Cache sein kann, was ungefähr die Kategorie Isolation und Entkopplung bedeutet.
In der Frühjahrswelt wird die Einführung jedes Moduls oder die Integration von Drittanbieter-Technologien immer eine Abstraktionsschicht bieten, die den Benutzern eine einheitliche API bereitstellt und alle Implementierungsdetails und Unterschiede zwischen verschiedenen Implementierungen blockiert. Beispielsweise bieten Module wie Spring-Cache, Spring-JDBC, Spring-JMS und Spirng-Messaging eine Abstraktionsebene.
Die Spring AOP-Implementierung ist ein Proxy-basierter Mechanismus, der standardmäßig JDK Dynamic Proxy verwendet und auch CGGLIB-Proxy verwenden kann. Der Unterschied zwischen den beiden ist hauptsächlich der Unterschied zwischen den gestellten Objekten. Wenn es sich bei dem Zielobjekt um eine Schnittstelle handelt, kann JDK Dynamic Proxy den Proxy vervollständigen. Wenn das Zielobjekt jedoch die Schnittstellenklasse nicht implementiert (versuchen Sie, weniger zu sein, ist eine Schnittstellenprogrammierung eine gute Gewohnheit), es ist erforderlich, CGLIB-Proxy zu verwenden, um den Proxy zu vervollständigen. Natürlich können Sie die Schnittstelle auch dazu zwingen, CGlib als Proxy zu verwenden. Wenn bestimmte Typen injiziert oder referenziert werden müssen, müssen Sie, wenn das referenzierte Objekt genau das Proxy -Objekt ist, auch die CGGLIB -Methode verwenden.
Funktionelles Design und Implementierung können in zwei Hauptteile unterteilt werden
Schaffung von AOP
Die Kernklasse, die das Proxy -Objekt proxyfactoryBean getObject () generiert,)
Die folgende Abbildung ist die Auswahllogik, ob JDK oder CGlib bei der Erzeugung eines Proxy verwendet werden soll:
Wann wird diese Operation aufgerufen, nachdem Sie den spezifischen Testamentsvollstrecker des Generationsagenten gefunden haben? Diejenigen, die den Lebenszyklus von Frühlingsbohnen verstanden haben, sollten wissen, dass beim Erstellen einer Bohne eine Reihe von Rückrufschnittstellen vorhanden sind, in denen Benutzer benutzerdefinierte Verhaltensweisen einfügen können, um einige Merkmale der Bean zu beeinflussen. BeanPostProcessor ist eine der Schnittstellen. Frühere Artikel wurden eingeführt (die ultimative Waffe zum Spielen mit Frühlingsbohnen). Spring AOP nutzte diese Gelegenheit, um einen Trick bei der Erstellung einer Bohne einzufügen. Wenn die erstellte Bean unser AOP -Ziel ist, erstellen Sie einen Proxy und geben Sie schließlich das Proxy -Objekt an IOC zurück.
AbstractAutoproxyCreator Diese Klasse ist eine Implementierung von BeanPostProcessor, die zum Erstellen eines Proxy verwendet wird, siehe die Nachbearbeitungsmethode dieses Prozessors und gibt schließlich den Proxy zurück, der von der CreateReRexy () -Methode zurückgegeben wurde.
Verbesserte Ausführung von AOP -Abschnitten
Es kann als Aufruf an alle Interceptor -Ketten des Zielobjekts verstanden werden
Da es zwei spezifische Implementierungen von Frühlings -AOP gibt, JDK Dynamic Proxy und Cglib, sind die Methoden zur Ausführung von Interceptors unterschiedlich. Für Details können Sie den Quellcode JDKDYNAMICAPPROXY INVOKE -Methode lesen
Der Aufruf zur Zielmethode hängt letztendlich auf reflektivemethodinvocation ab.
Die Prozessverarbeitung in reflektierter ReichethodinVocation verwendet eine rekursive Methode, um Interceptor -Ketten zu verarbeiten.
Intercept -Methode von Cglibaopproxy
CglibMethodinvocation inherits reflectivemethodinvocation, und die obige Process () -Methode wird zum Umgang mit Interceptor -Ketten verwendet.
Zwei Details zu beachten, wenn Frühlings -AOP verwendet wird:
1. Spring AOP funktioniert nicht, wenn Sie die Methode innerhalb der Klasse aufrufen (Selbstbeeinflussung), da der interne Aufruf das Proxy-Objekt nicht übergibt und direkt verwendet wird. Lösungen sind:
2. Verwenden Sie beim Injektieren von Bohnen anstelle der Schnittstelle CGGLIB
Spring AOP hat leistungsstarke Funktionen und cleveres Design. Der Hauptkontext wird hier sortiert und die Details werden nacheinander nicht besprochen.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.