Aspect oriented programming is often defined as a programming technique that promotes separation of concerns within a software system.
Systems are composed of several components, each responsible for a specific piece of functionality.
AOP gives you aspects. Aspects enable modularization of concerns such as transaction management that cut across multiple types and objects.
AOP is used in the Spring Framework:
To provide declarative enterprise services, especially as a replacement for EJB declarative services. The most important such service is declarative transaction management.
To allow users to implement custom aspects, complementing their use of OOP with AOP.