Получить доступ

Сколько экземпляров бина со scope singleton создаст контейнер?

JuniorКонтейнер изнутриSpring
Ещё спрашивают так:
  • Чем singleton Spring отличается от паттерна Singleton?
Коротко

Один экземпляр на контекст — не на всю JVM, как классический паттерн. Два контекста — два экземпляра; можно создать объект класса и вручную через new.

  • Общий для всех потоков — не хранить состояние запроса
  • Создаётся при старте (если не @Lazy)
  • Объявить два бина одного класса через @Bean — два «синглтона»

А ещё Это scope по умолчанию

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Различие с паттерном существенное: контейнерный синглтон ограничен контекстом, и если контекстов два, экземпляров тоже будет два. Кроме того, у него нет глобальной точки доступа — зависимость приходит через внедрение, поэтому подменить её в тесте легко. Практическое следствие, о котором нужно помнить всегда: раз экземпляр один на всех, изменяемое состояние в его полях становится общим для всех параллельных запросов, а это гонка.

Что хотят услышать

  • Один на контекст.
  • Отличие от паттерна и потокобезопасность.

Частые ошибки

  • Хранить в полях бина данные текущего запроса.
  • Отождествлять контейнерный singleton с классическим паттерном.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Один на весь ApplicationContext — все, кому он нужен, получают одну и ту же ссылку
  • ✗По одному на каждый HTTP-запрос
  • ✗По одному на каждое место внедрения
  • ✗Один на всю JVM, включая другие приложения в ней

Что спросят дальше

  • Чем prototype-scope отличается от singleton?
  • Как безопасно хранить данные, относящиеся к запросу?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем