Aspect-Oriented Programming (AOP) complements Object-Oriented Programming (OOP) by providing another way of thinking about program structure. The key unit of modularity in OOP is the class, whereas in AOP the unit of modularity is the aspect. We'll talk about AOP and its concepts including Aspect, Pointcut, and Advice. Then we'll use Spring AOP to put these concepts to use in a Java application.