I collaborated with a coworker to create this blurb for a corporate technology roadmap.
AspectJ is an aspect-oriented extension to the Java Â programming language. According to the folks at PARC who initiated this work 10 years ago,"...A key intuition underlying our work is that simple hierarchies are not rich enough to capture complex structures. In fact, we believe that any single ontological structure is insufficient. As a result, we have been exploring a variety of mechanisms that make it possible to view implement a system from multiple perspectives. One thing we believe about these multiple perspectives is that in order to have significant power they must be able to crosscut each other. That is, one perspective must be able to organize the implementation in fundamentally different ways than other perspectives." AspectJ is an implementation of these design principles for the Java language.
In this instance, we are researching the use of aspects to assist debugging an existing Java application. It has several different sources of data access and no single place in which to place logging or parameter setting logic. As such, we have found it very labor intensive to reliably search out all of those points and cut-and-paste the same code to every one of them. AspectJ allows us to define "pointcuts", or semantically well-defined places, where the existing object-oriented code can be prepended to, appended to, or wrapped by, "advice". Pointcuts and advice will allow us to consistently log all (diversely implemented) database accesses using only one definition (the aspect file). The advised code will add an identifier to every SQL statement in the application before it is executed by DB2. The advised code will also set the necessary JDBC parameters on every connection to enable additional tracing information produced by DB2. Because there is no editing of the actual codebase, the chance of code drift and bug introductions can be minimized. The chance that side-effects will be introduced into the codebase is almost non-existent since aspects cannot be directly referenced by Java classes. Aspects exist outside of existing code and, if they do not contain application logic themselves, can be selectively added or omitted during the Ant build.