Spring:如何将 HttpServletRequest 注入到请求范围的 Bean 中?

2022-08-31 09:09:39

我正在尝试在春季设置一个请求范围的bean

我已经成功设置了它,因此每个请求创建一次Bean。现在,它需要访问 HttpServletRequest 对象。

由于每个请求创建一次Bean,我认为容器可以很容易地将请求对象注入我的Bean中。我该怎么做?


答案 1

Spring 通过 类型的包装器对象公开当前对象(以及当前对象)。此包装器对象绑定到 ThreadLocal,并通过调用方法 获得。HttpServletRequestHttpSessionServletRequestAttributesstaticRequestContextHolder.currentRequestAttributes()

ServletRequestAttributes提供了获取当前请求的方法、获取当前会话的方法和其他方法,以获取存储在两个作用域中的属性。下面的代码虽然有点难看,但应该在应用程序中的任意位置获得当前请求对象:getRequest()getSession()

HttpServletRequest curRequest = 
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest();

请注意,该方法返回一个接口,并且需要类型转换为实现该接口的方法。RequestContextHolder.currentRequestAttributes()ServletRequestAttributes


Spring Javadoc: RequestContextHolder |ServletRequestAttributes


答案 2

请求范围的 Bean 可以与请求对象自动连接。

private @Autowired HttpServletRequest request;

推荐