This document provides an introduction to Aspect-Oriented Programming (AOP) and AspectJ. It discusses why AOP is used, how it handles cross-cutting concerns, and its implementations in Java. It also describes the AspectJ compiler, join points, advice types, and annotations. Sample code is provided in a GitHub repository to demonstrate using aspects.