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