aspectj is an aspect-oriented extension to Java that enables the clean modularization of crosscutting concerns such as error checking and handling, synchronization, context-sensitive behavior, performance optimizations, monitoring and logging, debugging support, and multi-object protocols.