AspectJ
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of crosscutting concerns, such as error checking and handling, synchronization, performance optimizations, monitoring, logging, debugging support, and multi-object protocols.