The designers of AspectJ elected to enhance the Java language to support AOP. Over the years, the AspectJ variant of Java has matured into a stable and complete AOP platform, with the AJDT offering excellent tool support.
However, changing the core Java language has met with a degree of criticism from some quarters. Some of the issues include the following:
Recent AOP implementations take the approach of defining aspects externally to the Java application using a framework in order to circumvent these issues. Frameworks enable the superimposing of AOP concepts onto existing Java applications without the need to move the entire application to a new AOP compiler. These frameworks typically use XML configuration files or J2SE 5.0-style metadata annotations to specify pointcuts and advice within the main application, ensuring AOP-specific keywords are isolated from the application. Advice is defined as standard Java classes, referenced by the framework's configuration.
A main advantage of these frameworks is that they bring AOP to vanilla Java, thereby easing the task of adopting AOP techniques within existing systems.
AOP Framework Implementations
The number of open source AOP frameworks available is growing steadily as AOP continues to gain interest among the Java community. Table 11-1 lists a selection of the AOP frameworks available as open source.
To contrast AspectJ against a framework AOP implementation, we look at the approach to defining aspects taken by AspectWerkz.