在Spring控制器中自动装配HttpServletRequest

6 java spring spring-mvc

假设我有一个Spring控制器.

@RequestMappin("/path")
public MyController {
}
Run Code Online (Sandbox Code Playgroud)

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

@RequestMappin("/path")
public MyController {
        @Autowired
        private HttpServletRequest request;
    }
Run Code Online (Sandbox Code Playgroud)

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

pio*_*rek 5

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


neo*_*neo 5

当弹簧基于web的应用白手起家,它将注册类型的豆ServletRequestServletResponseHttpSessionWebRequest的支持ThreadLocal的变量。因此,每当您请求上述四种中的一种时,实际值将是绑定到当前线程的实际存储的 ThreadLocal 变量。

您可以在@Autowired HttpServletRequest 中找到@Autowired HttpServletRequest 的详细实现机制