AspectWerkz

This is a rough rendering of a page from the old Prevayler wiki. Please see the new wiki for current documentation.

From http://aspectwerkz.sourceforge.net/:

AspectWerkz is a dynamic, lightweight and high-performant AOP/AOSD framework for Java.

AspectWerkz supports the following features:

* Runtime bytecode modification (using BCEL). Hooks in and transforms classes loaded by any class loader except the bootstrap class loader. Which basically means that you can easily transform any (legacy) application or external library apart from rt.jar both in runtime or during a compilation phase.
* The join point model supports interception of fields and methods, public, private, protected, and package protected, static and class members. It also supports exception interception.
* Introductions (Mixins/Open Classes), i.e. the possibility to add interfaces, methods and fields to existing classes.
* Transparent persistence for both advices and introductions.
* Four different deployment models (scope) for both advices and introductions: perJVM (singleton), perClass, perInstance and perThread.
* Hot deployment, advices and introductions can be dynamically deployed, undeployed or rearranged (without reloading or retransforming the target classes).
* High-performant, an Introduction or Advice adds an overhead of only 0.0004 ms/call.
* Meta-data additions to classes. Possibilities to add meta-data to all loaded classes.
* Regular expressions for selecting the pointcuts.
* Uses the same semantics as AspectJ. I.e. aspects, advices, pointcuts, join points and introductions.
* "Offline" transformation (can be used as a pre-processor).
* Aspects, advices and introductions are written in plain old Java code. I.e. no new language to learn, no new compilation phases, no need to tell your manager ;-)
* The target classes can be regular POJOs (Plain Old Java Objects), i.e. do not need to have an interface.
* External configuration using an XML config file.
* Simple usage and configuration.

From http://aspectwerkz.sourceforge.net/documentation.html#Persistence:

AspectWerkz supports transparent persistence of both advices and introductions. If an Advice or Introduction is marked as persistent, AspectWerkz will transparently persist it when one of it's fields becomes "dirty". The persistence manager implementation is pluggable, so it is possible to extend it with a custom implementation (the default implementation uses Prevayler as backend).

Congratulations for the AspectWerkz team (only JonasBonér, for now :) for the awesome work!

-- CarlosVillela