Выбор ответа Middle AOP и прокси обновлено

@Around без proceed

Вопрос

Аспект @Around логирует время, но разработчик забыл return pjp.proceed(); и написал просто pjp.proceed();. Что увидит вызывающий код метода findUser(): User?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: null: метод выполнится, а результат потеряется в аспекте. Результат целевого метода возвращает proceed(), а наружу уходит то, что вернул метод аспекта.

Варианты ответа

  1. null: метод выполнится, а результат потеряется в аспектеправильный ответ
  2. Нормальный результат: proceed сам вернёт его вызывающему
  3. Метод не выполнится вообще, вызов оборвётся в аспекте
  4. Ошибку компиляции: результат proceed нельзя игнорировать

Разбор

Результат целевого метода возвращает proceed(), а наружу уходит то, что вернул метод аспекта. Без return аспект вернёт null (если сигнатура аспекта Object). Метод при этом выполнится. Если бы вызова proceed не было совсем, целевой метод не выполнился бы.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме