Обзор скоупов Spring Bean
Spring Framework поддерживает семь скоупов бинов, пять из которых специально разработаны для веб-приложений, а два для общего использования.
Основные скоупы (все контексты)
Singleton
- Скоуп по умолчанию для всех бинов
- Создаёт один экземпляр объекта на контейнер Spring IoC
- Один и тот же экземпляр используется на протяжении всего жизненного цикла приложения
- Самый часто используемый скоуп
Prototype
- Создаёт новый экземпляр каждый раз, когда запрашивается бин
- Одно определение бина может порождать несколько экземпляров объектов
- Полезен для stateful-бинов, которым нужны независимые экземпляры
Веб-ориентированные скоупы (только Web ApplicationContext)
Request
- Экземпляр бина привязан к жизненному циклу одного HTTP-запроса
- Каждый HTTP-запрос получает свой собственный экземпляр бина
- Экземпляр удаляется после завершения запроса
Session
- Экземпляр бина привязан к жизненному циклу HTTP-сессии
- Один экземпляр бина на HTTP-сессию
- Сохраняется на протяжении нескольких запросов в рамках одной сессии
Global Session
- Экземпляр бина привязан к жизненному циклу глобальной HTTP-сессии
- В основном используется в окружении Portlet
- Обеспечивает единый скоуп сессии сразу для нескольких портлетов
Application
- Экземпляр бина привязан к жизненному циклу ServletContext
- Один экземпляр на всё веб-приложение
- Общий экземпляр используется для всех сервлетов и запросов
WebSocket
- Экземпляр бина привязан к жизненному циклу WebSocket
- Хранит состояние для отдельных WebSocket-соединений
- Экземпляр удаляется при закрытии WebSocket
Главное
Скоупы singleton и prototype работают в любом Spring-контексте, а остальные пять скоупов доступны только в веб-ориентированных окружениях ApplicationContext. Выбирай в зависимости от того, хранит ли твой бин состояние и как долго это состояние должно сохраняться.