Вопрос с собеседования · Spring

Какие виды advice существуют в Spring AOP?

MiddleAOP и проксиSpring
Ещё спрашивают так:
  • Какие бывают advice в AspectJ-аннотациях Spring?
Коротко

@Before — до метода, @AfterReturning — после успешного возврата, @AfterThrowing — после исключения, @After — в любом случае (как finally), @Around — вокруг, с вызовом proceed().

  • @Around — самый мощный: может изменить аргументы, результат, не вызвать метод
  • Забыть proceed() в @Around — метод не выполнится
  • Выбирать самый простой подходящий вид

А ещё @Transactional и @Cacheable устроены как around-advice

Подробно

Самый мощный — @Around: он получает ProceedingJoinPoint и сам решает, вызывать ли целевой метод, что и делает возможными кэширование, ретраи и circuit breaker. Именно поэтому важно не забыть вернуть результат proceed() — типичная ошибка, из-за которой метод возвращает null. Остальные виды проще и безопаснее, и правило хорошего тона — брать наименее мощный из подходящих. Порядок при нескольких аспектах задаётся через @Order, а сама аннотация @Transactional реализована ровно этим механизмом.

Что хотят услышать

  • Пять видов и когда срабатывает каждый.
  • Особенности @Around.

Частые ошибки

  • Забыть вернуть результат proceed() в @Around.
  • Использовать @Around там, где достаточно @Before.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓@Before и @After — до вызова и после в любом случае
  • ✓@AfterReturning и @AfterThrowing — после возврата и после исключения
  • ✓@Around — оборачивает вызов и может не вызывать метод
  • ✗@Instead — заменяет тело метода целиком, а исходная реализация вызывается только явно через proceed()

Что спросят дальше

  • Что можно сделать с исключением внутри @Around?
  • Как задать порядок нескольких аспектов на одном методе?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования