Ответ
Scope (область видимости) определяет жизненный цикл и контекст существования экземпляра бина в Spring IoC-контейнере.
Основные области видимости:
- Singleton (по умолчанию): Создается один экземпляр на весь контекст приложения.
- Prototype: Создается новый экземпляр при каждом запросе (через
getBean()или инъекцию). - Request: Один экземпляр на жизненный цикл одного HTTP-запроса (только для веб-приложений).
- Session: Один экземпляр на HTTP-сессию пользователя (только для веб-приложений).
- Application: Один экземпляр на
ServletContext(только для веб-приложений).
Зачем это нужно?
- Управление состоянием:
Prototypeподходит для stateful-бинов,Singleton— для stateless. - Безопасность потоков:
RequestиSessionизолируют данные между пользователями и запросами. - Оптимизация ресурсов:
Singletonэкономит память и время на создание,Prototypeпредотвращает нежелательное разделение состояния.
Пример объявления:
@Component
@Scope("prototype") // или @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class MyPrototypeService {
// ...
}