Когда вы создаете определение бина, то создаете набор правил для создания фактических экземпляров класса, определенного данным определением бина. Мысль о том, что определение бина представляет собой набор правил, очень важна, поскольку она означает, что, как и в случае с классом, можно создать множество экземпляров объектов из одного набора правила.

Можно управлять не только различными зависимостями и конфигурационными значениями, которые должны быть подключены к объекту, создаваемому из конкретного определения бина, но и контролировать область видимости объектов, создаваемых из конкретного определения бина. Данный подход обладает большими преимуществами и является гибким, поскольку можно выбирать область видимости объектов, которые вы создаете с помощью конфигурации, вместо того, чтобы подготавливать область видимости объекта на уровне класса Java. Бины можно определить для развертывания в одной из нескольких областей видимости. Spring Framework поддерживает шесть областей видимости, четыре из которых доступны только в том случае, если вы используете ориентированный на использование в веб-среде (web-aware) ApplicationContext. Вы также можете создать специальную область видимости.

В следующей таблице описаны поддерживаемые области видимости:

Таблица 3. Области видимости бина
Область применения Описание

объект-одиночка (singleton)

(По умолчанию) Применяет область видимости единственного определения бина к единственному экземпляру объекта для каждого IoC-контейнера Spring.

прототип (prototype)

Применяет область видимости единственного определения бина для любого количества экземпляров объектов.

запрос (request)

Применяет область видимости определения единственного бина для жизненного цикла единственного HTTP-запроса. Таким образом, для каждого нового HTTP-запроса создается новый экземпляр бина на основе единственного определения бина. Действует только в контексте ориентированного на использование в веб-среде (web-aware) ApplicationContext фреймворка Spring.

сессия (session)

Применяет область видимости единственного определения бина для жизненного цикла HTTP Session. Действует только в контексте ориентированного на использование в веб-среде (web-aware) ApplicationContext фреймворка Spring.

приложение (application)

Применяет область видимости единственного определения бина для жизненного цикла ServletContext. Действует только в контексте ориентированного на использование в веб-среде (web-aware) ApplicationContext фреймворка Spring.

веб-сокет (websocket)

Применяет область видимости единственного определения бина для жизненного цикла WebSocket. Действует только в контексте ориентированного на использование в веб-среде (web-aware) ApplicationContext фреймворка Spring.

Начиная с версии Spring 3.0, стала доступна потоковая область, но она не регистрируется по умолчанию. Для получения дополнительной информации см. документацию по SimpleThreadScope. Инструкции по регистрации этой или любой другой пользовательской области видимости см. в разделе Использование специальной области видимости.