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

@Async через this

Вопрос

public void register(User u) сохраняет пользователя и вызывает this.sendWelcome(u), помеченный @Async. Что произойдёт?

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

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

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

Коротко

Правильный ответ: Письмо отправится синхронно в том же потоке: мимо прокси. @Async работает тем же механизмом прокси, что и транзакции.

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

  1. Письмо отправится асинхронно в пуле задач, как и задумано
  2. Письмо отправится синхронно в том же потоке: мимо проксиправильный ответ
  3. Метод sendWelcome не вызовется вовсе, вызов отбросится
  4. Spring бросит исключение о вызове @Async через this

Разбор

@Async работает тем же механизмом прокси, что и транзакции. Вызов через this выполняется напрямую, синхронно, и задержка SMTP достанется пользователю. Исключения нет. Нужно вынести отправку в отдельный бин или публиковать событие и обрабатывать его @Async @EventListener. И ещё не забыть @EnableAsync.

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

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

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