Aspect-Oriented Programming is a technique similar to Object-Oriented Programming -- they both aim to structure software better. They're not exclusive, quite the opposite. Even the most beautiful OO design has some
crosscutting concerns such as logging, security, transaction boundaries, etc., which a typical OO design silently accepts as the unavoidable smell. AOP attempts to answer this problem by introducing concepts such as aspects (logging is one aspect, security is another, and so on) and pointcuts (where the aspects and objects meet). Java doesn't support AOP, yet, but there are a lot of AOP frameworks under development that are based on Java. Take a look at this
whitepaper by the recently formed AOP Alliance.