Выбор ответа Junior Бины: скоупы и жизненный цикл спрашивают часто обновлено
Состояние в singleton-сервисе
Вопрос
В @Service есть поле private User currentUser, которое метод выставляет в начале обработки запроса. Чем это плохо?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Бин один на приложение: запросы перезапишут поле. Singleton-бин разделяют все потоки веб-сервера.
Варианты ответа
- Ничем: каждый запрос получает свою копию сервиса
- Бин один на приложение: запросы перезапишут полеправильный ответ
- Spring запрещает изменяемые поля в сервисах
- Поле будет автоматически сброшено после запроса
Разбор
Singleton-бин разделяют все потоки веб-сервера. Запись «текущего пользователя» в поле это гонка: пользователь A может увидеть данные пользователя B. Spring не копирует бин на запрос и не сбрасывает поля, а изменяемые поля формально разрешены. Данные запроса передают параметрами или берут из request-скоупа и SecurityContext.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.