Java Reference
In-Depth Information
148 Aspektorientierte Programmierung
(AOP)
Die aspektorientierte Programmierung (AOP) dient zur Realisierung sogenannter Quer-
schnittsbelange (Cross Cutting Concerns). Darunter werden klassenübergreifende Auf-
gaben verstanden. Das Standard-Beispiel für AOP ist Logging. Damit ist gemeint, dass alle
Methodenaufrufe einer Anwendung protokolliert werden sollen. Wenn man dies ohne AOP
umsetzen möchte, bleibt einem nichts anderes übrig, als eine entsprechende Ausgabean-
weisung in allen Methoden einzufügen. Damit verstößt man gegen das DRY-Prinzip (DRY:
Don't Repeat Yourself). Mit AOP wird es möglich, die Ausgabeanweisung einmal zu pro-
grammieren und dann festzulegen, dass sie vor jedem Methodenaufruf ausgeführt wird,
ohne dabei den restlichen Programmcode anfassen zu müssen.
Andere Beispiele für Querschnittsbelange sind
! die Transaktionssteuerung (zu Beginn vieler Methoden soll eine Transaktion gestartet
und am Ende soll die Transaktion wieder beendet werden),
! die Zugriff skontrolle (bei jedem Methodenaufruf soll überprü werden, ob der Aufrufer
berechtigt ist, diese Methode zu nutzen)
! oder Caching (zu Beginn einer Methode soll geprü werden, ob das gewünschte, eventuell
aufwändig zu bestimmende Ergebnis früher schon einmal berechnet wurde; wenn ja,
wird das vorher berechnete Ergebnis aus einem Cache gelesen und zurückgeliefert,
andernfalls wird es berechnet, in den Cache übertragen und dann zurückgegeben).
AOP ist keine Technik, die es nur in Spring gibt. Sie kommt beispielsweise auch in AspectJ
oder EJB vor. Wir behandeln aber AOP in diesem Buch im Zusammenhang mit Spring, da
eine wesentliche Motivation für Spring war, Elemente aus EJB wie die deklarative Trans-
aktionssteuerung oder die deklarative Zugriff skontrolle auch für andere Anwendungen ver-
fügbar zu machen. Dies wird durch AOP möglich.
Bevor wir uns ein Beispiel zu AOP ansehen, sollen einige wichtige Begriff e der AOP einge-
führt werden:
! Aspekt: Ein Aspekt ist eine „Querschnittsangelegenheit“ (Cross Cutting Concern) wie
z. B. das Logging.
! Advice (Ratschlag): Darunter wird der „einzuwebende“ Code verstanden, also z. B. die
Ausgabeanweisungen zur Realisierung des Logging.
! Join Points: Das sind mögliche (abstrakte) Punkte, an denen Code grundsätzlich „einge-
woben“ werden kann. Als Join Points kann man sich Methodenaufrufe, die Rückkehr von
Methodenaufrufen, das Werfen von Ausnahmen, Zuweisungen, Zugriff e auf Felder, die
Ausführung von if-Anweisungen usw. vorstellen. In Spring AOP kommen als Join Points
nur Methodenaufrufe und die Rückkehr von Methodenaufrufen (auch durch Ausnahmen)
in Frage.
! Pointcuts: Dies ist eine konkrete Menge von Punkten in einem konkreten Programm, an
denen ein Advice „eingewebt“ werden soll. Diese Punkte werden meistens durch eine
Bedingung angegeben. Ein Beispiel für einen Pointcut wäre für ein konkretes Anwen-
dungsprogramm die Menge aller Methodenaufrufe aus den Packages p. q. und r. s. t, wobei
die aufgerufenen Methoden öff entlich sein müssen, drei Parameter haben müssen, von
 
Search WWH ::




Custom Search