Junior
119
questionbank
Какие области видимости (Scope) в Spring ты знаешь?
Ответ от нейросети
sobes.tech AI
Spring Framework определяет несколько областей видимости для бинов:
- Singleton: Один экземпляр бина создается на контейнер Spring. Это область видимости по умолчанию.
- Prototype: Новый экземпляр бина создается всякий раз, когда он запрашивается.
- Request: Для веб-приложений. Один экземпляр бина создается на HTTP-запрос.
- Session: Для веб-приложений. Один экземпляр бина создается на HTTP-сессию.
- Application: Для веб-приложений. Один экземпляр бина создается на весь контекст ServletContext.
- WebSocket: Для WebSocket-приложений. Один экземпляр бина создается на WebSocket-сессию.
- CustomScopes: Возможность определить собственные области видимости.
Вот пример объявления бина с различной областью видимости:
// Объявление Singleton (по умолчанию)
@Component
public class SingletonBean {
// ...
}
// Объявление Prototype
@Component
@Scope("prototype")
public class PrototypeBean {
// ...
}
// Объявление Request (для веб-приложений)
@Component
@Scope("request")
public class RequestBean {
// ...
}
// Объявление Session (для веб-приложений)
@Component
@Scope("session")
public class SessionBean {
// ...
}
Разница между Singleton и Prototype:
| Свойство | Singleton | Prototype |
|---|---|---|
| Количество экземпляров | Один на контейнер | Новый при каждом запросе |
| Управление жизненным циклом | Контейнером Spring | Контейнером Spring до создания, далее - пользователь |
| Состояние | Общее состояние для всех обращений | Отдельное состояние для каждого экземпляра |
Области видимости Request, Session, Application и WebSocket применимы только в контексте веб-приложений и управляются соответствующими обработчиками запросов или сессий.