Java Core senior

В чём проблема — несколько связанных пунктов?

Ответ

Несколько связанных проблем. (1) Поле не final — может быть случайно перезаписано, в том числе через reflection. Для thread-safe сервиса (а Spring singleton — он всегда thread-safe должен быть) — это потенциальная проблема: singleton один на контейнер и разделяется между потоками, поэтому изменяемое состояние даёт гонки. Решение — делать поля final/неизменяемыми и инжектить через конструктор.

Разбор: Spring singleton по умолчанию один на контейнер и разделяется между всеми потоками, поэтому изменяемое (не-final) состояние в нём — источник гонок и его лучше делать final / неизменяемым либо инжектить через конструктор. Неверно, что бин создаётся на каждый запрос (это scope prototype/request), что volatile сам по себе решает все гонки и что конструкторная инъекция в singleton приводит к NPE.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться