Выбор ответа Junior Бины: скоупы и жизненный цикл спрашивают часто обновлено

Состояние в singleton-сервисе

Вопрос

В @Service есть поле private User currentUser, которое метод выставляет в начале обработки запроса. Чем это плохо?

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

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

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

Коротко

Правильный ответ: Бин один на приложение: запросы перезапишут поле. Singleton-бин разделяют все потоки веб-сервера.

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

  1. Ничем: каждый запрос получает свою копию сервиса
  2. Бин один на приложение: запросы перезапишут полеправильный ответ
  3. Spring запрещает изменяемые поля в сервисах
  4. Поле будет автоматически сброшено после запроса

Разбор

Singleton-бин разделяют все потоки веб-сервера. Запись «текущего пользователя» в поле это гонка: пользователь A может увидеть данные пользователя B. Spring не копирует бин на запрос и не сбрасывает поля, а изменяемые поля формально разрешены. Данные запроса передают параметрами или берут из request-скоупа и SecurityContext.

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

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