Ответ
В Spring scope singleton означает, что контейнер IoC создает и управляет единственным экземпляром бина на протяжении всего жизненного цикла контекста приложения. Это экземпляр кэшируется и возвращается при всех последующих запросах и инъекциях зависимостей.
Характеристики:
- Дефолтный scope: Если scope не указан явно (
@Scope), бин создается как singleton. - Общий доступ: Все запросы к этому бину получают один и тот же объект.
- Жизненный цикл: Создается при инициализации контекста и уничтожается при его закрытии.
Пример объявления:
@Component // или @Service, @Repository
// @Scope("singleton") // Аннотацию можно опустить, так как это значение по умолчанию
public class DatabaseService {
// ...
}
Важные аспекты:
- Потокобезопасность: Не гарантирована по умолчанию. Если состояние бина изменяемое, необходимо обеспечить синхронизацию.
- Производительность: Экономит память и время на создание объектов, но может стать узким местом (bottleneck) в высоконагруженных многопоточных приложениях, если требует синхронизации.
- Зависимости: Зависимости singleton-бинов инжектируются только один раз при его создании (если они тоже не являются scope
prototypeс proxy).