Назад к вопросам
Junior
168
questionbank
Какие области видимости бинов в Spring вы знаете?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
В 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-сессии. |
Пример определения бина с определенной областью видимости:
// Пример определения бина с областью видимости prototype
@Component
@Scope("prototype")
public class MyPrototypeBean {
// ... поля и методы ...
}