Einführung in AspectJ ● Inhalt: 1)Überblick 2)Elemente des crosscuttings in AspectJ 3)„Hello World“ in AspectJ 4)Wie Aspekte in Java verwoben werden 5)Join Points 6)Aspects 7)Logistik von AspectJ Gabor Meißner, Sommersemester 2006
1. Überblick ● Warum „AspectJ“? – Die Sprache ist eine Erweiterung von Java – Jedes Java- Programm ist auch ein AspectJ- Programm – Der AspectJ- Compiler erzeugt also.class- Dateien, die von der Java VM ausgeführt werden können
2. Elemente des crosscutting in AspectJ ● Was ist „crosscutting“? – Ist die Umsetzung des Verwebungskonzepts (weaving) aspektorientierter Programmierung in AspectJ – Verschiedene Module werden systematisch verwoben – Man unterscheidet in dynamisches (während der Ausführung) und statisches (in statischen Strukturen) crosscutting
2. Elemente des crosscutting in AspectJ ● Elemente des crotting in AspectJ sind: – Join points (Ereignis im Programmablauf) – Advices (Empfehlungen) – Pointscuts (Schnittpunkte) – Introductions (statisches Pendant zu join points) – Compile-time declaration (statische Umsetzung von Warnungs-/ Fehlererkennung) – Aspects („Klassen“ der Aspektorientierung)
2. Elemente des Crosscutting in AspectJ ● Vorgehensweise im Überblick 1.Definition von join points: An welcher Stelle im System soll das Verhalten geändert werden? 2.Implementierung des Designs mit Aspekten 3.Umsetzung der Funktionen durch point cuts 4.Implementierung der advices, die den point cuts zugeordnet sind
3. “Hello World” in AspectJ ● Funktionsweise am Beispiel: – Die Java- Klasse „MessageCommunicator“:
3. “Hello World” in AspectJ ● Test- Klasse für „MessageCommunicator“:
3. “Hello World” in AspectJ ● Ausgabe wäre dann... – Willst du AspectJ lernen? – Harry, viel Spass! ● Wir definieren nun den Aspekt „MannersAspect“
3. “Hello World” in AspectJ ● Eine zweite Erweiterung: der Nachsatz „-ji“ (indische Ausdruck des Respektes):
4. Wie Aspekte in Java verwoben werden ● Der AspectJ- Compiler muss Code erzeugen, der von der Java VM interpretiert werden kann ● Zentrale Frage dieses Abschnitts: Wie wandelt dieser Compiler also die Elemente der aspektorientierten Programmierung in „normalen“ Java- Bytecode um?
4. Wie Aspekte in Java verwoben werden ● Aspects: – Werden als normale Klassen abgebildet, alle Daten und Methoden bleiben entsprechend erhalten. ● Advices: – Als eine oder mehrere Methoden. Ihr Aufruf findet an der Schnittstelle zwischen join points und pointcuts statt ● Pointcuts: – Werden meist nicht explizit abgebildet – können aber bei komplexeren Aufgaben in Methodenform realisiert werden
4. Wie Aspekte in Java verwoben werden ● Introductions: – Durch Veränderungen im Quellcode der Klassen ● Compile-zeit Warnungen und Fehler: – Klar: erzeugen Warnungen und Fehler ● Nun kann gezeigt werden, wie ein veränderter Quellcode der MessangerCommunication- Klassen aussehen würde (Achtung: der Compiler erzeugt keinen veränderten Java- Quellcode, sondern nur Java- Bytecode!)
4. Wie Aspekte in Java verwoben werden ● Wir wandeln also den Aspekt in eine Klasse um:
4. Wie Aspekte in Java verwoben werden ● Nun müssen ebenfalls Anpassungen der MessangerCommunicator- Klasse vorgenommen werden:
5. Join points ● = jeder identifizierbare Ausführungspunkt, z.B.: – Methodenaufrufe, -ausführungen, ein return- Statement... ● In AspectJ findet bei diesen join points das zentrale Konzept des crosscutting seine Umsetzung ● Jeder für den Programmierer nutzbare join point nennt sich exposed join points ● Man unterscheidet in verschiedene Kategorien, die nun vorgestellt werden sollen
5. Join points ● Methoden- join points – Es gibt Ausführungs- und Aufrufsvarianten – Beispiel für execution join point:
5. Join points ●... und ein Beispiel für einen call join point: – Der Aufruf (account.debit(100)) ist der Ort für den join point
5. Join points ● Constructor join points: – Ähnlich wie Methoden- join points, nur für Konstruktoren ● Field access join points: – Bei Lese-/ Schreibzugriffen auf Klassenmitglieder oder Instanzen ● Exception handler execution join points: – Bei der Ausnahmebehandlung... ● Class (pre-) initialization join points: – Bei der Initialisierung eines Objekts... ● Advice execution join points: – Umfasst alle Advices eines Systems...
6. Aspects ● Sind klassen- ähnliche Einheiten, die die Regeln der Verhaltsänderungen eines Systems durch Aspekte implementieren ● Der Aufbau der Aspekte:
6. Aspects ● Die wichtigsten Regeln im Umgang mit Aspekten: – Können data members, methods und Zugriffsspezifikationen besitzen – Können abstrakt sein – Können Klassen und abstrakte Aspekte beinhalten und können in Klassen und Interfaces eingebettet werden – Können mit priviligiertem Zugriff versehen werden
7. Logistik von AspectJ ● Der Compiler und seine Arbeitsweise wurden bereits vorgestellt... ● Es gibt einen speziellen Browser zur Darstellung der Verwebung ● Sowie eine Plugin- basierte Anbindung an gängige Programmierumgebungen für Editierung, Compilierung und Debugging