Ответ
Request scope в Spring означает, что контейнер создаёт отдельный экземпляр бина для каждого HTTP-запроса и уничтожает его после завершения обработки этого запроса. Это идеально для хранения состояния, специфичного для одного запроса (например, аутентификационные данные пользователя, параметры формы).
Объявление через аннотации:
@Component
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class UserRequestData {
// Состояние, уникальное для запроса
}
Или для метода @Bean в конфигурации:
@Bean
@RequestScope
public UserData userData() {
return new UserData();
}
Ключевые моменты:
- Область применения: Работает только в веб-приложениях (Spring MVC, Spring WebFlux).
- Настройка: Для поддержки вне MVC (например, в сервлет-листенере) требуется регистрация
RequestContextListenerвweb.xml. - Проксирование: Часто требуется режим прокси (
proxyMode), чтобы инжектировать бин request scope в singleton-бины (создаётся прокси, который в runtime резолвится в актуальный бин запроса). - Альтернативы: Для более сложных сценариев можно использовать
ThreadLocal, но request scope управляется контейнером и безопаснее.