Что означает scope singleton для бина в Spring?

«Что означает scope singleton для бина в Spring?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Spring scope singleton означает, что контейнер IoC создает и управляет единственным экземпляром бина на протяжении всего жизненного цикла контекста приложения. Это экземпляр кэшируется и возвращается при всех последующих запросах и инъекциях зависимостей.

Характеристики:

  • Дефолтный scope: Если scope не указан явно (@Scope), бин создается как singleton.
  • Общий доступ: Все запросы к этому бину получают один и тот же объект.
  • Жизненный цикл: Создается при инициализации контекста и уничтожается при его закрытии.

Пример объявления:

@Component // или @Service, @Repository
// @Scope("singleton") // Аннотацию можно опустить, так как это значение по умолчанию
public class DatabaseService {
    // ...
}

Важные аспекты:

  • Потокобезопасность: Не гарантирована по умолчанию. Если состояние бина изменяемое, необходимо обеспечить синхронизацию.
  • Производительность: Экономит память и время на создание объектов, но может стать узким местом (bottleneck) в высоконагруженных многопоточных приложениях, если требует синхронизации.
  • Зависимости: Зависимости singleton-бинов инжектируются только один раз при его создании (если они тоже не являются scope prototype с proxy).