Выбор ответа Middle AOP и прокси обновлено
@Async через this
Вопрос
public void register(User u) сохраняет пользователя и вызывает this.sendWelcome(u), помеченный @Async. Что произойдёт?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Письмо отправится синхронно в том же потоке: мимо прокси. @Async работает тем же механизмом прокси, что и транзакции.
Варианты ответа
- Письмо отправится асинхронно в пуле задач, как и задумано
- Письмо отправится синхронно в том же потоке: мимо проксиправильный ответ
- Метод sendWelcome не вызовется вовсе, вызов отбросится
- Spring бросит исключение о вызове @Async через this
Разбор
@Async работает тем же механизмом прокси, что и транзакции. Вызов через this выполняется напрямую, синхронно, и задержка SMTP достанется пользователю. Исключения нет. Нужно вынести отправку в отдельный бин или публиковать событие и обрабатывать его @Async @EventListener. И ещё не забыть @EnableAsync.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.