我们说我有一个Spring控制器。
@RequestMappin("/path")
public MyController {
}
如上所述,控制器的默认范围是Singleton。 我知道我可以在REQUEST范围bean中自动发送请求,但是,如果我尝试自动发送请求,那么
@RequestMappin("/path")
public MyController {
@Autowired
private HttpServletRequest request;
}
它仍然有效,并且对于每个请求,我得到了适当的请求对象。这是否意味着无论范围是否是请求,autowire都能正常工作?
答案 0 :(得分:5)
如果它的工作意味着spring不会完全注入http请求而是注册代理。代理委托调用当前的http请求
答案 1 :(得分:2)
您可以在每个Web服务方法中获取HttpServletRequest
个对象。如:
@RequestMapping("/method")
public void method(HttpServletRequest req) {
// ...
}
答案 2 :(得分:2)
基于Spring Web的应用程序启动时,它将在ThreadLocal变量的支持下注册类型ServletRequest
,ServletResponse
,HttpSession
,WebRequest
的bean。因此,每当您请求以上四种中的一种时,实际值就是绑定到当前线程的实际存储的ThreadLocal变量。
您可以在以下位置找到@Autowired HttpServletRequest的详细实现机制: @Autowired HttpServletRequest