AspectJ ist eine aspektorientierte Programmiererweiterung (AOP) für die Programmiersprache Java , entwickelt von PARC . Sie ist in den Open-Source-Projekten der Eclipse Foundation verfügbar , sowohl als eigenständige Anwendung als auch integriert in Eclipse . AspectJ hat sich durch seine Einfachheit und Benutzerfreundlichkeit zu einem weit verbreiteten De-facto-Standard für AOP entwickelt. Es verwendet eine Java-ähnliche Syntax und bietet seit seiner ersten Veröffentlichung im Jahr 2001 IDE-Integrationen zur Darstellung von Querschnittsstrukturen .

Beschreibung in einfacher Sprache

Alle gültigen Java-Programme sind auch gültige AspectJ-Programme, aber AspectJ ermöglicht es Programmierern, spezielle Konstrukte, sogenannte Aspekte, zu definieren . Aspekte können verschiedene Entitäten enthalten, die in Standardklassen nicht verfügbar sind. Diese sind:

Erweiterungsmethoden
Ermöglicht es Programmierern, bestehenden Klassen innerhalb des Aspekts Methoden, Felder oder Schnittstellen hinzuzufügen. Dieses Beispiel fügt der Klasse eine Methode hinzu acceptVisitor(siehe Besuchermuster ):Point
aspect VisitAspect { void Point . acceptVisitor ( Visitor v ) { v . visit ( this ); } }
Pointcuts
Programmierern wird ermöglicht, Joinpoints (genau definierte Zeitpunkte in der Programmausführung, wie Methodenaufrufe, Objektinstanziierungen oder Variablenzugriffe) festzulegen. Alle Pointcuts sind Ausdrücke ( Quantifizierungen ), die bestimmen, ob ein bestimmter Joinpoint übereinstimmt. Beispielsweise stimmt dieser Pointcut mit der Ausführung jeder Instanzmethode eines Objekts vom Typ überein, Pointdessen Name mit einem Doppelpunkt beginnt set.
pointcut set () : execution ( * set * (..) ) && this ( Point );
Ratschläge
Ermöglicht es Programmierern, Code an einem durch einen Pointcut definierten Joinpoint auszuführen . Die Aktionen können vor , nach oder um den angegebenen Joinpoint herum ausgeführt werden. Hier aktualisiert der Advice die Anzeige jedes Mal, wenn ein Wert Pointgesetzt wird, und verwendet dabei den oben deklarierten Pointcut.
nach () : set () { Display . update (); }

AspectJ unterstützt außerdem eingeschränkte Formen der punktschnittbasierten statischen Prüfung und die Wiederverwendung von Aspekten (durch Vererbung). Eine detailliertere Beschreibung der Sprache finden Sie im AspectJ-Programmierhandbuch .

AspectJ-Kompatibilität und Implementierungen

AspectJ lässt sich auf verschiedene Arten implementieren, beispielsweise durch Source-Weaving , Bytecode-Weaving oder direkt in der virtuellen Maschine (VM) . In allen Fällen wird das AspectJ-Programm zu einem gültigen Java-Programm, das in einer Java Virtual Machine (JVM) ausgeführt werden kann. Klassen, die von Aspekten betroffen sind, sind binärkompatibel mit nicht betroffenen Klassen (um die Kompatibilität mit Klassen zu gewährleisten, die mit den nicht betroffenen Originalen kompiliert wurden). Die Unterstützung mehrerer Implementierungen ermöglicht es der Sprache, mit dem technologischen Wandel zu wachsen, und die Java-Kompatibilität sichert die Plattformverfügbarkeit.

Der Erfolg von AspectJ beruht maßgeblich auf technischen und sprachlichen Entscheidungen, die die Sprache nutzbar und Programme bereitstellbar machen. Die ursprüngliche Xerox-Implementierung von AspectJ nutzte Source Weaving, was den Zugriff auf den Quellcode erforderte. Nachdem Xerox den Code an Eclipse weitergegeben hatte, wurde AspectJ mit dem Eclipse-Java-Compiler und einem auf BCEL basierenden Bytecode-Weaver neu implementiert . Dadurch konnten Entwickler Aspekte für Code in Binärform (.class) schreiben. Zu diesem Zeitpunkt war die AspectJ-Sprache auf ein klassenbasiertes Modell beschränkt, das für die inkrementelle Kompilierung und das Load-Time Weaving unerlässlich war. Dies ermöglichte eine ebenso schnelle Integration in IDEs wie in Java und erlaubte Entwicklern die Bereitstellung von Aspekten, ohne den Build-Prozess zu verändern. Dies führte zu einer verstärkten Nutzung, da AspectJ nun auch für ungeduldige Java-Programmierer und unternehmensweite Implementierungen geeignet war. Seitdem hat das Eclipse-Team die Performance und Korrektheit weiter verbessert, die AspectJ-Sprache um Java-5 -Sprachfunktionen wie Generics und Annotationen erweitert und reine Java-Aspekte im Annotationsstil von AspectWerkz integriert .

Das Eclipse-Projekt unterstützt sowohl die Kommandozeile als auch die Ant- Schnittstelle. Ein zugehöriges Eclipse-Projekt hat die Unterstützung der Eclipse-IDE für AspectJ ( AspectJ Development Tools, AJDT ) und andere Anbieter übergreifender Strukturen kontinuierlich verbessert. Die IDE-Unterstützung für Emacs , NetBeans und JBuilder kam zum Erliegen, als Xerox diese als Open Source veröffentlichte, während Unterstützung für Oracles JDeveloper eingeführt wurde. Die IDE-Unterstützung war für Java-Programmierer, die AspectJ nutzen und übergreifende Belange verstehen, von entscheidender Bedeutung.

BEA bietet nur eingeschränkte VM-Unterstützung für aspektorientierte Erweiterungen an. Erweiterungen, die in allen Java VMs unterstützt werden sollen, erfordern jedoch eine Zustimmung im Rahmen des Java Community Process von Sun (siehe auch das Paket java.lang.instrument, das seit Java SE 5 verfügbar ist – eine gemeinsame Basis für die JVM-Ladezeitinstrumentierung).

Seit der Veröffentlichung von AspectJ besteht großes akademisches Interesse an der Semantik und Implementierung aspektorientierter Sprachen. Die führende Forschungsimplementierung von AspectJ ist der AspectBench Compiler ( abc) . Er unterstützt Erweiterungen zur Änderung der Syntax und Semantik der Sprache und bildet die Grundlage für zahlreiche AOP-Experimente, die das AspectJ-Team aufgrund der breiten Nutzerbasis nicht mehr unterstützen kann.

Viele Programmierer entdecken AspectJ als Basistechnologie für andere Projekte, insbesondere für Spring AOP . Ein Schwesterprojekt von Spring, Spring Roo , verwaltet AspectJ- Intertypdeklarationen automatisch als Hauptausgabe seines Codes.

Geschichte und Mitwirkende

Gregor Kiczales gründete und leitete das Xerox PARC- Team, das schließlich AspectJ entwickelte. Er prägte den Begriff „Crosscutting“ . Chris Maeda , das vierte Mitglied des Teams, prägte den Begriff „ aspektorientierte Programmierung“. Jim Hugunin und Erik Hilsdale ( Mitglieder 12 und 13 des Xerox PARC -Teams) waren die ursprünglichen Compiler- und Weaver-Entwickler. Mik Kersten implementierte die IDE-Integration und startete zusammen mit Adrian Colyer und Andrew Clement das Eclipse AJDT- Projekt . Nach Adrian Colyer übernahm Andrew Clement die Projektleitung und die Hauptverantwortung für AspectJ. AJDT wurde inzwischen als eigenständiges Projekt eingestellt und in das Dachprojekt Eclipse AspectJ integriert, um die Wartung zu vereinfachen. AspectJ und AJDT werden jedoch weiterhin in separaten Quellcode-Repositories gepflegt.

2021 stieß Alexander Kriegisch zum Projekt hinzu, zunächst als Mitwirkender, später als Committer und Maintainer. Seit März 2021 ist er im Wesentlichen der alleinige Maintainer. Ab 2024 leitet er zudem offiziell die Projekte AspectJ und AJDT.

Der AspectBench Compiler wurde als gemeinsames Projekt der Programming Tools Group am Oxford University Computing Laboratory , der Sable Research Group an der McGill University und des Institute for Basic Research in Computer Science (BRICS) entwickelt und wird von diesem betreut .

AspectWerkz

AspectWerkz war ein dynamisches, leichtgewichtiges und leistungsstarkes AOP/AOSD- Framework für Java . Es wurde in das AspectJ-Projekt [ 2 ] integriert, das seit AspectJ 5 die Funktionalität von AspectWerkz unterstützt.

Jonas Boner und Alex Vasseur entwickelten das AspectWerkz-Projekt und trugen später zum AspectJ-Projekt bei, als dieses den AspectWerkz-Annotationsstil und die Unterstützung für Load-Time Weaving integrierte.

Im Gegensatz zu AspectJ vor Version 5 führte AspectWerkz keine neuen Sprachkonstrukte in Java ein, sondern unterstützte die Deklaration von Aspekten mithilfe von Java-Annotationen . Es nutzt Bytecode-Modifikationen, um Klassen zur Projekterstellungszeit, zum Laden der Klassen sowie zur Laufzeit zu verweben . Dabei verwendet es standardisierte JVM-APIs . Aspekte können entweder über Java-Annotationen (eingeführt mit Java 5), ​​benutzerdefinierte Java 1.3/1.4 -Doclets oder eine einfache XML-Definitionsdatei definiert werden .

AspectWerkz stellt eine API zur Verfügung, um dieselben Aspekte für Proxys zu nutzen und bietet somit eine transparente Benutzererfahrung, die einen reibungslosen Übergang für Benutzer ermöglicht, die bereits mit Proxys vertraut sind.

AspectWerkz ist freie Software . Die Lizenz im Stil der LGPL erlaubt die Verwendung von AspectWerkz 2.0 sowohl in kommerziellen als auch in Open-Source-Projekten.

Siehe auch

Referenzen

  1. ^ „Version 1.9.25.1“ . 17. Dezember 2025. Abgerufen am 19. Dezember 2025 .
  2. ^ „AspectJ und AspectWerkz schließen sich zusammen“ . Aspectwerkz . 12.07.2006. Archiviert vom Original am 12. Juli 2006. Abgerufen am 19.03.2024 .