Ответ
Область видимости (scope) бина в Spring определяет жизненный цикл и контекст, в котором существует единственный экземпляр этого бина. Это управляет тем, как и когда Spring создает, использует и уничтожает бин.
Основные scope (из коробки):
singleton(по умолчанию): Создается один экземпляр на весь IoC-контейнер. Все запросы к этому бину получают один и тот же объект.@Component @Scope("singleton") // Аннотация избыточна, так как это scope по умолчанию public class SingletonService { ... }prototype: Каждый запрос к контейнеру (черезgetBean()или инъекцию) возвращает новый экземпляр.@Component @Scope("prototype") public class PrototypeProcessor { ... }request: Один экземпляр на жизненный цикл одного HTTP-запроса (только для веб-приложений).session: Один экземпляр на HTTP-сессию пользователя (только для веб-приложений).application: Один экземпляр наServletContext(аналогично singleton, но в контексте веб-приложения).websocket: Один экземпляр на жизненный цикл WebSocket-сессии.
Почему это важно? Выбор scope влияет на:
- Потребление памяти (singleton экономит память, prototype может ее расходовать).
- Потокобезопасность: Singleton-бины должны быть спроектированы как потокобезопасные, prototype-бины по своей природе изолированы для каждого потока/запроса.
- Внедрение зависимостей: Внедрение prototype-бина в singleton требует особого подхода (например, через
@LookupилиObjectFactory), чтобы избежать "застревания" одного экземпляра prototype в singleton.