Aspect Oriented Programming.
Basically, concerns that cross-cut many of your classes, that you don't want to code more than once. Examples are logging, auditing, trace, performance timing etc. AOP provides 'pointcuts' that allow you to hook in at certain execution points in your code, e.g. method invocation. You can then execute some common function like auditing or logging at this point without having to put the code in your classes.
Personally I think it's a great way to handle non-functional requirements (like the examples above) but I feel that attempting to use it as a way to 'bolt on' functional requirements after a system is built will lead to a maintenance nightmare.
HTH
Steve