在Spring控制器中自动装配HttpServletRequest

时间:2015-02-20 22:00:04

标签: java spring spring-mvc

我们说我有一个Spring控制器。

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

如上所述,控制器的默认范围是Singleton。 我知道我可以在REQUEST范围bean中自动发送请求,但是,如果我尝试自动发送请求,那么

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

它仍然有效,并且对于每个请求,我得到了适当的请求对象。这是否意味着无论范围是否是请求,autowire都能正常工作?

3 个答案:

答案 0 :(得分:5)

如果它的工作意味着spring不会完全注入http请求而是注册代理。代理委托调用当前的http请求

答案 1 :(得分:2)

您可以在每个Web服务方法中获取HttpServletRequest个对象。如:

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

答案 2 :(得分:2)

基于Spring Web的应用程序启动时,它将在ThreadLocal变量的支持下注册类型ServletRequestServletResponseHttpSessionWebRequest的bean。因此,每当您请求以上四种中的一种时,实际值就是绑定到当前线程的实际存储的ThreadLocal变量。

您可以在以下位置找到@Autowired HttpServletRequest的详细实现机制: @Autowired HttpServletRequest