Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Spring Framework Grundkurs

Spring AOP und AspectJ

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Spring setzt bei Dependency Injection auf viele Konventionen, die bereits aus AspectJ bekannt sind. Die Kenntnis der Parallelen zwischen beiden Tools ist daher entscheidend.

Transkript

Aspektorientierte Programmierung wird hauptsächlich immer mit dem ursprünglichen Projekt AspectJ assoziiert. Die Implementierung der aspektorientierten Programmierung in Spring, Spring AOP, hat auch nicht den exakt gleichen Funktionsumfang. Was genau Spring AOP bewerkstelligt und wofür es eingesetzt wird lernen Sie nun in den nächsten Minuten. Abgesehen von den Anwendungspunkten, die man in seiner eigenen Anwendung für Spring AOP hat nutzt Spring die Funktionalitäten auch selbst. Viele der Konzepte, die Spring anbietet, wie beispielsweise das Transaktionsmanagement sind im Hintergrund auf Spring AOP realisiert worden. Denn genau diese Prozesse, die notwendig sind, um diese Möglichleiten anzubieten übergreifende Funktionalität abzubilden abzubilden bietet eben das Basis-Framework Spring AOP. Spring Security ist ein weiterer Kandidat wie auch viele andere Komponenten des Spring Frameworks selbst. Anders als AspectJ ist Spring AOP auch komplett in der Bibliothek und in Java selbst definiert und implementiert. Prinzipiell ist es nun also auch möglich Spring AOP zu nutzen ohne Abhängigkeiten zu anderen Bibliotheken zu haben. Der Kontrast von Spring AOP und AspectJ kommt zunächst einmal daher, dass Spring AOP nicht die gleiche Menge an Funktionen bietet wie AspectJ, denn Spring AOP funktioniert nur zur Laufzeit, was so viel bedeutet wie das Spring AOP auch nur auf den Aufrufen von Methoden wirken kann. AspectJ ist diesbezüglich deutlich vielseitiger, denn es kann sowohl Variablenaufrufe als auch viele andere Dinge anhand eines Compilers verändern. Der reguläre Weg bei AspectJ ist also, wenn man Code schreibt, wird dieser nicht mehr wie herkömmlich vom Java Development Kit unmittelbar kompiliert sondern stattdessen gibt es einen sogenannten AspectJ-Compiler der die gesamten Aspekte nimmt und in den Code hinein programmiert. Das Resultat sind dann tatsächliche Klassen, die auch die Funktionalität beinhalten. Bei Spring allerdings funktioniert all dies nur zur Laufzeit, weshalb auch einige Dinge nicht mehr möglich sind. Nichtsdestotrotz erfindet Spring AOP nicht die Welt neu, denn viele der Konzepte und die API von AspectJ werden beispielsweise auch bei der Nutzung von Spring AOP verwendet. Dazu gehören unter anderem die Annotationen. Aus AspectJ bleiben also die Annotationen, die sich im Wesentlichen auf Laufzeitaspekte beziehen. Denn AspectJ ist ähnlich wie Spring auch in der Lage den Prozess der aspektorientierten Programmierung, also das Weaving auch zur Laufzeit durchzuführen. Allerdings gibt es eben auch einige Feinheiten, die nur zur Kompilierzeit ausgeführt werden können. Diese Annotationen gelten innerhalb des Spring Frameworks nicht. Prinzipiell besteht aber keine unmittelbare Abhängigkeit von der Funktionalität von AspectJ, was so viel heißt wie, dass der ursprüngliche Compiler und auch der Weaver von AspectJ nicht notwendig sind um das Spring Framework und im Besonderen Spring AOP nutzen zu können. Lediglich die Annotationen dienen als Referenz, so dass auch die Austauschbarkeit von AspectJ als Basis und Spring Framework AOP als Basis jederzeit möglich ist. Nun stellt sich die Frage, wie Spring AOP diesen Prozess der Veränderung bewerkstelligt. Ausgehend von einer regulären Klasse, in diesem Fall Klasse A, kann man zur Laufzeit immer ein Objekt erstellen. Das wäre dann konkret die Instanz A. Stellen Sie sich diese Instanz und die Klasse zum Beispiel als Bankkonto vor. Das Bankkonto bietet nun eine besondere Methode an, wie z. B. Geld abheben. Am Ende steht immer der Benutzter der Methode. Der ruft nun eben die Methode Geld abheben auf der Instanz A auf und folglich würde der Prozess dementsprechend stattfinden. Im Falle der aspektorientierten Programmierung erhält man die Instanz der Klasse A nicht unmittelbar, sondern Spring stellt die Instanz der Klasse A zu Verfügung. Die Instanz die Spring nun bereitstellt und die verändert worden ist, bezeichnet man auch als Proxyobjekt. Proxyobjekt deshalb, weil die Instanz B zwar die Basisfunktionalitäten von Klasse A unterstützt aber auch einige Änderungen an der herkömmlichen Ausführung von Klasse A hat. Instanz B führt nun also auch die gleiche Methode M aus, allerdings kann nun Spring um die Methode M zusätzliche Funktionalität herumbauen. Wenn also nun zusätzlich ein Aspekt definiert ist, wie beispielsweise ein Logging-Vorgang, würde der eine weitere Methode definieren. Dies ist die Methode, die beispielsweise den Vorgang loggen soll. Wenn man nun also Geld abheben aufrufen möchte, ähnlich wie auf Instanz A, stattdessen auf Instanz B, ruft man zunächst einmal das auf, was Spring außen rum gebaut hat. Dieses Außenrum ruft dann auch entsprechend zunächst einmal den Aspekt auf. Der Aspekt hat nun die Möglichkeit zu entscheiden, ob er den weiteren Aufruf der Methode des Geld abhebens zulassen möchte oder nicht. Tut er das, so wird die Methode M regulär ausgeführt und vorher wurde der jeweilige Log-Eintrag geschrieben. Aus Sicht von Spring ist die Aktivierung des AOP Pakets natürlich mit Konfiguration verbunden. Dafür ist es also nötig innerhalb der Spring-Konfigurationsdatei Anpassungen vorzunehmen. Wichtig ist zunächst einmal in den Definitionen, die Namensbereiche aop und die jeweiligen Ursprünge zu definieren. Wenn also nun der XML-Präfix aop definiert ist, kann man anhand der Anweisung None den Vorgang der Erstellung von Aspekten automatisieren, ohne jede einzelne explizit definieren zu müssen. Das würde man immer dann tun, wenn man vor allem auch auf Annotationen setzt. Alternativ kann über die Anweisung None jeder Aspekt einzeln definiert werden innerhalb der XML-Datei. Je nach Präferenz muss man nun also entscheiden, ob man mit Annotationen primär arbeiten möchte oder ob man mit der XML-Definition arbeiten möchte. Sie sahen nun also die Bedeutung des Spring AOP innerhalb des Frameworks, als auch die Unterschiede zwischen herkömmlichen aspektorientierten Programmierung und mit AspectJ. Des Weiteren haben Sie den Prozess kennengelernt, wie Spring die Aspekte auf Objekten definiert und wissen nun auch wie man das AOP-Framework an sich aktivieren kann.

Spring Framework Grundkurs

Steigen sie zum Java-Champion auf und meistern Sie den Umgang mit dem Spring Framework.

2 Std. 4 min (20 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Spring Framework Spring Framework 3
Exklusiv für Abo-Kunden
Erscheinungsdatum:24.09.2014

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!