Ответ
В Spring-приложении существует несколько типов контекстов (scope), каждый со своей областью видимости и временем жизни.
Основные контексты (scopes) бинов Spring:
singleton(по умолчанию): Один экземпляр бина на весьApplicationContext. Используется для stateless-сервисов.prototype: Новый экземпляр бина при каждом запросе через контейнер.request: Один экземпляр на жизненный цикл одного HTTP-запроса. Доступен только в веб-приложениях.session: Один экземпляр на HTTP-сессию пользователя.application: Один экземпляр наServletContext. Аналогиченsingleton, но привязан к контексту веб-приложения.
Пример объявления бина с областью видимости request:
@Component
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class RequestScopedBean {
private final String data = "Request-specific data";
// ...
}
Важные связанные понятия:
ApplicationContext: Корневой контейнер Spring, обычно один на приложение, но могут быть иерархии (родительский/дочерний).WebApplicationContext: Специализированный контекст для веб-приложений.SecurityContext(Spring Security): Хранит информацию об аутентификации и правах текущего потока (привязан кThreadLocal).
Выбор контекста определяет, как и когда создаются/уничтожаются бины, что критично для управления состоянием и ресурсами.