Короткий ответ
Spring AOP (Aspect Oriented Programming) — парадигма, дополняющая ООП: сквозные задачи — логирование, безопасность, управление транзакциями, аудит — выносятся из бизнес-логики в отдельные модули. Если в ООП основная единица — класс, то в AOP это аспект.
Как это работает подробнее
По моменту выполнения советы делятся на before (до метода), after returning (после успешного завершения), after throwing (если метод бросил исключение), after (finally) — в любом случае, и around, который выполняется и до, и после метода и может управлять его выполнением. Основные применения AOP: логирование, безопасность и аутентификация, декларативные транзакции, обработка исключений, сбор метрик API. Код аспектов собирается в одном месте, переиспользуется, а бизнес-код остаётся чистым.
- Aspect (аспект) — класс, который реализует сквозную функциональность, затрагивающую сразу несколько классов, например логирование или проверку прав.
- Join Point (точка соединения) — место в ходе выполнения программы, в котором может быть применён аспект; в Spring AOP точкой соединения всегда является выполнение метода.
- Advice (совет) — действие, которое аспект выполняет в определённой точке соединения, например запись лога до вызова метода.
- Pointcut (срез точек) — выражение-предикат, определяющее, к каким точкам соединения применить совет; в Spring используется expression language AspectJ, например
execution(* com.example.dao.*.*(..)).
Пример кода
LoggingAspect.java
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.service.*.*(..))")
public void logCall(JoinPoint joinPoint) {
System.out.println("called: " + joinPoint.getSignature().getName());
}
}