Hardaop

Что такое AOP в Spring?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

AOP (Aspect-Oriented Programming) — разделение cross-cutting concerns (логирование, транзакции, security, caching). Spring AOP использует dynamic proxies (JDK для interfaces, CGLIB для классов).

@Aspect
@Component
public class LogAspect {
    @Around("execution(* com.example.service..*(..))")
    public Object log(ProceedingJoinPoint pjp) throws Throwable {
        log.info("before {}", pjp.getSignature());
        Object result = pjp.proceed();
        log.info("after  {}", pjp.getSignature());
        return result;
    }
}

Концепции:

  • Aspect — модуль с advices (@Aspect);
  • Advice — действие: @Before, @After, @Around, @AfterReturning, @AfterThrowing;
  • Pointcut — где применять (execution(* com.example..*.*(..)));
  • Join point — в Spring только method execution.

Self-invocation (this.method() внутри класса) — proxy не используется, advice не сработает. AspectJ мощнее (compile-time weaving).

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.