Spring:如何将HttpServletRequest注入请求范围的bean?

我试图在Spring中设置一个请求范围的bean 。

我已经成功设置,所以每个请求创build一次bean。 现在,它需要访问HttpServletRequest对象。

由于bean是每个请求创build一次,我认为容器可以很容易地在我的bean中注入请求对象。 我怎样才能做到这一点 ?

请求范围的bean可以使用请求对象自动assembly。

private @Autowired HttpServletRequest request; 

Spring通过ServletRequestAttributestypes的包装器对象公开当前的HttpServletRequest对象(以及当前的HttpSession对象)。 该包装器对象绑定到ThreadLocal,并通过调用static方法RequestContextHolder.currentRequestAttributes()

ServletRequestAttributes提供getRequest()方法获取当前请求, getSession()获取当前会话和其他方法来获取存储在这两个范围中的属性。 下面的代码虽然有点难看,但应该可以让你获得应用程序中任何地方的当前请求对象:

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

请注意, RequestContextHolder.currentRequestAttributes()方法返回一个接口,并需要对实现接口的ServletRequestAttributes进行types化。


Spring Javadoc: RequestContextHolder | ServletRequestAttributes