В Spring Framework существуют следующие области видимости (scopes) бинов:
singleton: Один экземпляр бина создается для каждого контекста Spring. Является областью видимости по умолчанию. Ленивая инициализация может быть включена.prototype: Новый экземпляр бина создается при каждом запросе к нему.request: Новый экземпляр бина создается для каждого HTTP-запроса. Действителен только в контексте веб-приложения.session: Новый экземпляр бина создается для каждой HTTP-сессии. Действителен только в контексте веб-приложения.application: Один экземпляр бина создается для всего контекста веб-приложения (ServletContext). Действителен только в контексте веб-приложения.websocket: (Начиная со Spring 4.0) Новый экземпляр бина создается для каждого жизненного цикла WebSocket-сессии.Наиболее часто используемые области видимости:
| Область видимости | Описание | Инициализация | Жизненный цикл |
|---|---|---|---|
singleton | Один экземпляр на Spring ApplicationContext. | По умолчанию при старте контекста (можно сделать ленивой) | До завершения работы ApplicationContext. |
prototype | Новый экземпляр при каждом запросе к бину. | При каждом запросе к бину. | Определяется клиентом (кто запросил бин). |
request | Новый экземпляр на каждый HTTP-запрос. | При обработке первого запроса, включающего бин. | До завершения обработки текущего HTTP-запроса. |
session | Новый экземпляр на каждую HTTP-сессию. | При первом обращении к бину в рамках сессии. | До завершения HTTP-сессии. |
application | Один экземпляр на весь ServletContext (веб-приложение). | При старте ServletContext (можно сделать ленивой). | До завершения работы ServletContext. |
websocket | Новый экземпляр на каждый жизненный цикл WebSocket-сессии. | При установлении WebSocket-сессии. | До завершения WebSocket-сессии. |
Пример определения бина с определенной областью видимости:
java