В Spring Framework во всех определениях бизнес-сущностей (bean) явно или неявно присутствует атрибут scope. В Java-конфигурации он передается в аннотации
@Scope, в xml – в атрибуте
scope тега
<bean>.
Атрибут scope – это строка-идентификатор, которая ставит бину в соответствие экземпляр класса
org.springframework.beans.factory.config.Scope. Скоуп – реализация паттерна «стратегия» для фабрик бинов, инструкция по созданию бизнес-объектов.
В простейшем Spring-приложении всегда существует два сокоупа:
•
singleton – объект создается однажды, при последующих
внедрениях переиспользуется. Полезен для большинства случаев: различные сервисы, объекты без состояния,
неизменяемые объекты. Стоит заметить, это не класс-синглтон: при объявлении двух бинов одного класса их экземпляров будет два.
Это скоуп по умолчанию.
•
prototype – при каждом внедрении фабрика бинов создает новый объект. Нужен для изменяемых бинов с состоянием.
Spring Web добавляет 4 дополнительных скоупа, которые делают бин синглтоном в пределах обработки одного сетевого запроса (
request), клиентской сессии (
session), контекста сервлета (
application) и вебсокет-сессии (
websocket).
Разработчик может добавлять собственные скоупы. Пример реализации одного можно найти в самих исходниках Spring:
SimpleThreadScope, который делает бин
тред-локальным. Для использования его, как и пользовательские скоупы, нужно сначала зарегистрировать в
BeanFactory.