Какие Spring Scope знаешь?
Spring Scopes определяют жизненный цикл и область видимости бинов в приложении. Они задают, как и когда создаются и уничтожаются экземпляры бинов.
Короткий ответ
Основные области видимости Spring: Singleton, Prototype, Request, Session, Application, WebSocket.
Длинный ответ
В Spring Framework предусмотрены следующие области видимости (scopes):
- Singleton (по умолчанию):
Создается единственный экземпляр бина на контейнер IoC, который повторно используется для всех запросов.
Пример:
@Component
@Scope("singleton")
public class MySingletonBean {
}
- Prototype:
Новый экземпляр бина создается для каждого запроса. Это полезно, когда требуется отдельный объект для каждой задачи.
Пример:
@Component
@Scope("prototype")
public class MyPrototypeBean {
}
- Request (только для веб-приложений):
Создается один экземпляр бина для каждого HTTP-запроса. Бин существует только в течение обработки запроса.
Пример:
@Component
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyRequestBean {
}
- Session (только для веб-приложений):
Создается один экземпляр бина на каждую HTTP-сессию. Удобен для хранения пользовательских данных.
Пример:
@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MySessionBean {
}
- Application (только для веб-приложений):
Создается один экземпляр бина для всего сервлет-контекста. Используется для данных, общих для всех пользователей.
Пример:
@Component
@Scope(value = "application", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyApplicationBean {
}
- WebSocket (только для приложений с WebSocket):
Создается один экземпляр бина для каждого WebSocket-соединения. Подходит для управления данными в сеансе WebSocket.
Пример:
@Component
@Scope(value = "websocket", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyWebSocketBean {
}