Spring:如何将HttpServletRequest注入请求范围的bean?
我试图在Spring中设置一个请求范围的bean 。
我已经成功设置,所以每个请求创build一次bean。 现在,它需要访问HttpServletRequest对象。
由于bean是每个请求创build一次,我认为容器可以很容易地在我的bean中注入请求对象。 我怎样才能做到这一点 ?
请求范围的bean可以使用请求对象自动assembly。
private @Autowired HttpServletRequest request;
Spring通过ServletRequestAttributes
types的包装器对象公开当前的HttpServletRequest
对象(以及当前的HttpSession
对象)。 该包装器对象绑定到ThreadLocal,并通过调用static
方法RequestContextHolder.currentRequestAttributes()
。
ServletRequestAttributes
提供getRequest()
方法获取当前请求, getSession()
获取当前会话和其他方法来获取存储在这两个范围中的属性。 下面的代码虽然有点难看,但应该可以让你获得应用程序中任何地方的当前请求对象:
HttpServletRequest curRequest = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()) .getRequest();
请注意, RequestContextHolder.currentRequestAttributes()
方法返回一个接口,并需要对实现接口的ServletRequestAttributes
进行types化。
Spring Javadoc: RequestContextHolder | ServletRequestAttributes