我正在尝试在Spring中建立一个请求范围的bean。
我已经成功设置好了,所以每个请求创建一次bean。现在,它需要访问HttpServletRequest对象。
由于该bean是每个请求创建一次的,所以我认为容器可以轻松地将请求对象注入到我的bean中。我怎样才能做到这一点 ?
可以将请求范围的Bean与请求对象自动连接。
private @Autowired HttpServletRequest request;
Spring 通过type 的包装器对象公开当前HttpServletRequest对象(以及当前HttpSession对象)。此包装对象绑定到ThreadLocal,可以通过调用方法获得。ServletRequestAttributesstaticRequestContextHolder.currentRequestAttributes()
HttpServletRequest
HttpSession
ServletRequestAttributesstaticRequestContextHolder.currentRequestAttributes()
ServletRequestAttributes提供getRequest()获取当前请求,getSession()获取当前会话的方法以及获取存储在两个范围中的属性的其他方法。以下代码虽然有点难看,但应该可以在应用程序中的任何位置为你提供当前的请求对象:
ServletRequestAttributes
getRequest()
getSession()
HttpServletRequest curRequest = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()) .getRequest();
请注意,该RequestContextHolder.currentRequestAttributes()方法返回一个接口,并且需要进行类型转换以ServletRequestAttributes实现该接口。
RequestContextHolder.currentRequestAttributes()