java - Spring:如何将 HttpServletRequest 注入(inject)请求范围的 bean?

标签 java spring servlets

我正在尝试设置 request-scoped bean在 Spring 。

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

由于每个请求都会创建一次 bean,我认为容器可以轻松地将请求对象注入(inject)到我的 bean 中。我该怎么做?

最佳答案

Spring 通过 ServletRequestAttributes< 类型的 wrapper 对象公开当前的 HttpServletRequest 对象(以及当前的 HttpSession 对象)/。这个包装对象绑定(bind)到ThreadLocal,通过调用static方法RequestContextHolder.currentRequestAttributes()获取。

ServletRequestAttributes提供方法getRequest()获取当前请求,getSession()获取当前 session 等方法获取存储在两个范围中的属性。以下代码虽然有点难看,但应该可以在应用程序中的任何位置为您提供当前请求对象:

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

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


Spring Javadoc: RequestContextHolder | ServletRequestAttributes

关于java - Spring:如何将 HttpServletRequest 注入(inject)请求范围的 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3320674/

相关文章:

java - Hibernate 上任意类型映射的连接查询

Grails 中的 Spring Oauth2 提供程序 - 依赖项

java - 调用时不支持获取 "405 - Request method ' GET'method=DELETE

java - arraylists的arraylist的内部arraylist的交互

java - 将闭包从 java 传递到 groovy

java - Spring 和 Hibernate 的事务管理使非 Activity 事务成为可能

java - 为什么在类路径中(在 WEB-INF/lib 下)我无法使用 getResourceAsStream 读取属性文件

tomcat - 如何使用导入包 "javax.servlet.annotation"加载 OSGi 插件

java - 无法使用 Webdriver 和 Java 获取 xpathcount

java.lang.NoClassDefFoundError : javassist/util/proxy/MethodFilter 错误