Vortrag Einführung in AspectJ
Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving
1 Einleitung AspectJ ist eine aspektorientierte Erweiterung für Java seit Ende 2002 ein Eclipse Technologie Projekt ( Bestandteile von AspectJ: –Compiler (Weaver) –Debugger –Browser zur Visualisierung
2 Querschnittsfunktionalitäten in AspectJ Crosscutting = Querschneiden Querschneiden in AspectJ Dynamisches Querschneiden Einfügen von neuen Verhaltensweisen in den Programmablauf an wohl definierten Punkten (Join Points) Statisches Querschneiden Verändern der statischen Struktur zur Übersetzungszeit
2.1 Sprachelemente: Join Point Join Point (Verbindungspunkt): Ein Join Point ist eine identifizierbare Stelle in der Ausführung eines Programms, welche durch eine Reihe von Anweisungen (Advice) modifiziert werden kann. Beispiel: call (public void Konto.einzahlen(double))
2.1 Sprachelemente: Pointcut Pointcut (Schnittpunkt): Pointcuts spezifizieren eine Menge von Join Points an denen die Anweisungen (Advice) „eingewoben“ werden sollen. Beispiel: pointcut kontobewegung (double betrag): (call (public void Konto.einzahlen(double)) || call( public void Konto.abheben(double)))
2.1 Sprachelemente: Advice Advice (Anweisung): Ein Advice ist eine Erweiterung oder Modifikation, die vor nach oder anstelle eines Join Points ausgeführt werden soll. (Methoden der Aspekte)
2.1 Sprachelemente: Advice Man unterscheidet drei Advice- Typen: Before- Advice: Der Code wird vor dem Join Point aufgerufen Around- Advice: Der Code wird statt des Join Point aufgerufen After- Advice: Der Code wird nach der Ausführung des Join Point aufgerufen
2.1 Sprachelemente: Instruktionen Instruktionen: Mit Instruktionen kann in eine bestehende Klasse um weitere Attribute und Methoden erweitert werden. Instruktionen stellen eine rein statische Systemerweiterung dar. Beispiel: private int Konto.Kontonummer; public int Konto.getKontonummer() { return Kontonummer; }
2.1 Sprachelemente: Aspekt Aspekt: Aspekte stellen eine Erweiterung des Klassen- Konzepts dar. Sie sind die Behälter in denen Weaving- Regeln mit Hilfe von Pointcuts, Advice (Anweisungen) und Instruktionen umgesetzt werden. (Weaving= weben)
2.1 Sprachelemente: Aspekt Aspekte können… –Methoden und Variablen enthalten –in ihrer Sichtbarkeit spezifiziert werden –als abstract definiert sein –können nur von abstrakten Aspekten erben –nur vom Laufzeitsystem instanziert werden –können als privileged deklariert werden
2.1 Sprachelemente: Aspektpriorität Aspektpriorität: für einen Pointcut können mehrere Advice definiert werden
3 Beispiel: Anforderungen Java Applikation für eine Kontoführung zentrales Element Java Klasse „Konto“ Funktionale Anforderungen: –Einzahlen –Abheben –Überweisung –Kontostandabfrage –…
3 Beispiel: Klasse „Konto“ mögliche Implementierung:
3 Beispiel: Querschnittsfunktionalitäten systemspezifische Anforderungen: –Kontrolle der Beträge –Ausnahmebehandlung –Logging (Protokollierung) die Methoden „einzahlen“ & „abheben“ besitzen bezüglich Ausnahmebehandlung die selben Anforderungen Kontrolle ob negative Beträge als Parameter übergeben werden
3 Beispiel: Advice & Pointcut Advice (Anweisungen zur Kontrolle der Inputparameter): Pointcut Definition (Menge von Join Points)
3 Beispiel: Aspekt vollständiger Aspekt
4 Join Point Modell: Kategorien Unterscheidung anhand des Wirkungsbereiches KategorieWirkungsbereich MethodenAufruf (call) oder Ausführung (execution) von Methoden Konstruktoren Aufruf (call) oder Ausführung von Konstruktoren (execution) VariablenzugriffLese (get)- oder Schreibzugriff (set) auf eine Variable Ausnahme- behandlung Der catch- Block einer bestimmten Anweisung (handler) Initialisierung1. Laden einer Klasse & initialisieren ihrer statischen Variablen (staticinitialization) 2. Initialisierung eines bestimmten Objekt (initialization) VorinitialisierungAufruf von super() im Konstruktor eines bestimmten Objekts (preinitialization) Advice- Ausführung Betrifft die Ausführung von einem Advice (adviceexecution)
4 Join Point Modell: Eigenschaften Join Points werden durch Pointcuts definiert man unterscheidet anonyme & benannte Pointcuts benannte Pointcuts können über ihren Namen in einen Advice angesprochen werden
4 Join Point Modell: Arten zwei Arten von Pointcuts: Pointcuts kategorisierte Pointcuts: Indizieren eine Menge von gleichartigen Pointcuts (s. Join Points in Kategorien) nicht kategorisierte Pointcuts Pointcuts welche sämtliche Join Points innerhalb eines Bereiches indizieren
4 Join Point Modell (4) nicht kategorisierte Pointcuts:
5 Weaving Java Klasse Erweiterung: *.class ByteCode Java Compiler (z.B. javac) AspectJ Aspekt Erweiterung: *.aj Source Code Java Klasse Erweiterung: *.java Source Code AspectJ Compiler (z.B. ajc) Aspekte werden in den Java- Bytecode eingewebt
Quellen [1]RAMNIVAS LADDAD: AspectJ in Action, Manning Verlag [2] OLIVER BÖHM: Aspektorientierte Programmierung mit AspectJ 5, Dpunkt Verlag