Получить доступ

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

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

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

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

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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем