@Autowired HttpServletRequest与传递参数-最佳实践
问题内容:
假设我们定义了一个@Controller
仅具有注释的控制器类。
在类内部,我们定义了private @Autowired HttpServletRequest request;
变量。
弹簧控制器是Singleton。当我们定义HttpServletRequest
为@Autowired
在Web应用程序,这将是一个问题?
我从一个网站上了解到,即使@Autowired
它只是为线程变量注入代理。
是真的吗 在多线程环境中,我们可以使用控制器类中的每个方法@Autowired
或将其HttpServletRequest
作为参数传递给正确的方法吗?
一些网站表示这是一个问题,建议将其作为参数传递,而很少有人说这将是一个问题。
我不知道哪一个是正确的。
问题答案:
都可以。
@Autowired HttpServletRequest
和作为参数传递是相同的事情。
在传递HttpServletRequest
给响应@RequestMapping
函数的调用方法之前,Spring会将其存储HttpServletRequest
到ThreadLocal
类型变量中。
该ThreadLocal
变量是线程安全的映射,保留HttpServletRequest
在当前线程上下文中。该@Autowired HttpServletRequest
代理bean会从正确的请求ThreadLocal
变量。