Может ли Scope Request существовать в GenericApplicationContext в Spring?

«Может ли Scope Request существовать в GenericApplicationContext в Spring?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, не может. GenericApplicationContext — это базовая, не веб-ориентированная реализация ApplicationContext. Он не содержит инфраструктуры для поддержки скоупов, зависящих от веб-запроса (request) или сессии (session).

Почему?

  • Request scope требует привязки жизненного цикла бина к HTTP-запросу (javax.servlet.http.HttpServletRequest).
  • GenericApplicationContext не имеет доступа к контексту веб-приложения (например, ServletContext) и не управляет областью видимости запроса.

Решение: Используйте контекст, поддерживающий веб-функциональность, например AnnotationConfigWebApplicationContext или XmlWebApplicationContext (оба реализуют WebApplicationContext).

Пример объявления бина с request scope:

@Configuration
public class WebConfig {
    @Bean
    @Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
    public MyRequestScopedBean myBean() {
        return new MyRequestScopedBean();
    }
}