This document introduces aspect-oriented programming (AOP) and compares AOP frameworks. It discusses how AOP aims to increase modularity by separating cross-cutting concerns. It then defines key AOP terms like join points, advice, and pointcuts. The document compares static and dynamic AOP weaving approaches and evaluates various frameworks based on their expressiveness and runtime behavior.