aspect weaver

Der Aspektweber, Aspect Weaver, fügt Aspekt- und Komponentencode an den Verbindungspunkten zusammen. Ein Aspektweber kann zu unterschiedlichen Zeitpunkten weben, z.B. zur Übersetzungszeit, Ladezeit oder Laufzeit. Demnach werden auch verschiedene Typen von Aspektwebern unterschieden.


Aspektweber (Aspect Weaver) werden im Zusammenhang mit aspektorientierter Programmierung (AOP) verwendet. Die Aufgabe eines Aspektwebers ist es, den Programmcode oder auch Bytecode mit dem Aspekt-Code an den definierten Verwebungspunkten - den Join Points - zu verweben. Dabei werden die folgenden Typen von Aspektwebern unterschieden:

Aspekt-Weber

Aspekt-Weber

Quellcode-Weber. Verweben den funktionalen Programmcode mit dem Aspekt-Code vor der Übersetzung des Programmcodes - source code weaver.

Bytecode-Weaver

Bytecode-Weaver

Bytecode-Weber. Verweben den Aspekt-Code mit dem bereits compilierten funktionalen Programmcode - Byte Code Weaver.

Ladezeit-Weber. Verweben den funktionalen Bytecode eines Programms mit dem Aspekt-Code zu Ladezeit des Programms - Link Time Weaver.

Laufzeit-Weber. Verweben den Aspekt-Code mit dem geladenen funktionalen Bytecode zur Laufzeit - run time weaver.

Man differenziert diesbezüglich in statische Weber (Quellcode- und Bytecode-Weber) und dynamische Weber (Ladezeit- und Laufzeit-Weber).

Die statischen Aspektweber verweben also den funktionalen Programmcode mit dem Aspekt-Code vor bzw. nach der Compilierung des Programmcodes. Beispiele für statische Aspektweber sind: AspectJ, AspectBench-Compiler, AspectC#, AspectC++ oder HyperJ.

Bei dynamischen Aspektwebern wird der Aspekt-Code mit funktionalem Bytecode dynamisch zur Laufzeit verwoben. Dabei sind genaueste Informationen über die zu verwebenden Objekte und die Aspekte erforderlich. Nach der Verwebung an den zuvor definierten Verwebungspunkten (Join Points) sind die Aspekte Teil der Objekte. Zu dieser Form von dynamischer Verwebung der Aspekte existieren die folgenden vier Ansätze:

Wrapper. Dabei wird für jedes Objekt ein spezielles Wrapper-Objekt implementiert, das dann für die Ausführung des Aspekt-Codes verantwortlich ist. Das Wrapper-Objekt behandelt alle Aufrufe und Referenzen und wird deshalb auch als Proxy-Objekt bezeichnet.

Bytecode Transformation. Basiert darauf, dass der Aspekt-Code in die geladenen Klassen des Programms erst zur Ladezeit eingewoben wird, wozu der Class Loader ersetzt werden muss. Dadurch wird die Implementierung der Klassen modifiziert.

Just-In-Time (JIT). Dies wird auch als Instrumentierung der JIT-Schicht bezeichnet, wobei der JIT-Compiler und die virtuelle Maschine angepasst werden müssen.

Dynamische Code Instrumentierung. Hierbei wird gezielt der Bytecode im Speicher zur Laufzeit modifiziert. Das zugrunde liegende Prinzip ist simpel; es wird einfach ein bedingungsloser Sprung auf den einzuwebenden Aspekt-Code ausgeführt. Zuvor wird die eigentliche Programm-Ausführung angehalten und die Register-Inhalte werden gesichert. Nach Ausführung des Aspekt-Codes werden die ursprünglichen Registerinhalte wieder hergestellt und die Ausführung des Programms fortgesetzt.

Beispiele für dynamische Aspektweber sind:Rapier-LOOM. NET für das .NET-Framework, AspectS - aspektorientierte Programmierung (AOP) mit Squeak, JBoss Aspect Oriented Programming, Java Aspect Components, JMangler und JMunger. Besonders interessant ist dabei das JBoss AOP-Framework, das die Entwicklung von aspektorientierten Lösungen für Java unterstützt. Dabei lässt sich dieses Framework direkt in den JBoss Application Server integrieren oder auch isoliert nutzen, indem das Framework dazu die benötigten Klassen zur Verfügung stellt. Weiterhin orientiert sich JBoss an den allgemein gültigen Konzepten der aspektorientierten Programmierung (AOP)

Informationen zum Artikel
Deutsch: Aspektweber
Englisch: aspect weaver
Veröffentlicht: 31.10.2013
Wörter: 487
Tags: #Softwarekomponenten
Links: .NET, Anwendungsserver, AspectJ, Aspekt, Aspektorientierte Programmierung