Короткий ответ
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());
}
}Что использовать на практике
- Используйте AOP для сквозных задач: логирование, аудит, безопасность, декларативные транзакции, сбор метрик.
- Держите аспекты отдельными компонентами (
@Aspect+@Component) и применяйте их точечно через pointcut-выражения. - Когда нужен полный контроль над выполнением метода (замер времени, повторные попытки), используйте совет around.
Подводные камни
- Spring AOP работает через прокси, поэтому применяется только к внешним вызовам бина, а не к внутренним вызовам через
this. - Перехватываются только публичные методы бинов; используются JDK-динамический прокси или CGLIB.
- Не путайте понятия: совет — это действие, а pointcut — то, к каким методам оно применяется.
Как отвечать на собеседовании
- Дайте определение AOP и назовите выгоду: вынос сквозных задач из бизнес-логики → разберите четыре термина: аспект, join point, advice, pointcut → перечислите типы советов (before, after returning, after throwing, after, around) → приведите пример применения, например логирование или транзакции.