Autowiring HttpServletRequest в весеннем контроллере

предположим, у меня есть пружинный контроллер.

@RequestMappin("/path")
public MyController {
}

как указано, область по умолчанию контроллера-Singleton. Я знаю, что я могу autowire запрос в бобах области запроса, однако, если я попытаюсь autowire запрос, так что

@RequestMappin("/path")
public MyController {
        @Autowired
        private HttpServletRequest request;
    }

Он все еще работает, и для каждого запроса я получаю соответствующий объект запроса. Означает ли это, что autowire работает независимо от области запроса или нет?

3 ответов


если он работает, это означает, что spring не вводит точно http-запрос, а прокси-сервер. делегаты прокси-сервера вызывают текущий http-запрос


Вы можете узнать HttpServletRequest объект в каждом методе webservice. Например:

@RequestMapping("/method")
public void method(HttpServletRequest req) {
   // ...
}

когда весеннее веб-приложение загрузится, оно зарегистрирует Боб типа ServletRequest,ServletResponse,HttpSession,WebRequest С поддержкой ThreadLocal переменных. Поэтому всякий раз, когда вы запрашиваете один вид выше четырех, фактическим значением будет фактическая сохраненная переменная ThreadLocal, привязанная к текущему потоку.

вы можете найти механизмы реализации деталей @Autowired HttpServletRequest на @Autowired HttpServletRequest