Spring Boot中HttpServletRequest是否为Request Scope Bean?文档及源码位置问询
关于
HttpServletRequest作为请求作用域Bean的相关说明 官方文档记载位置
Spring Framework官方文档有明确对应说明,相关内容位于核心文档的「Web Servlet」模块下的「Request, Session, Application, and WebSocket Scopes」小节:Spring Web环境会自动将HttpServletRequest、HttpServletResponse、HttpSession等Servlet原生API对象注册为对应作用域的可注入Bean,其中HttpServletRequest默认是请求作用域。
你可以在对应版本的Spring Framework官方文档中搜索上述小节名称直接定位到原文。
代码实现位置
该能力属于Spring Framework的原生特性,并不在Spring Boot代码库中,核心实现逻辑分为两部分:
- 依赖注册逻辑:位于
spring-web模块的WebApplicationContextUtils类中,Web应用上下文初始化时会自动注册Servlet相关对象的可解析依赖规则 - 运行时实例获取逻辑:由
RequestScope作用域处理器实现,请求到达时会从RequestContextHolder存储的线程本地上下文对象中取出当前请求对应的真实HttpServletRequest实例返回
如果是Spring Boot环境,该初始化流程会在ServletWebServerApplicationContext的启动过程中自动触发,不需要额外手动配置。
注意:你不需要为注入的
HttpServletRequest手动添加@RequestScope注解,Spring会自动注入一个动态代理对象,每次调用代理方法都会路由到当前请求对应的真实实例,即使注入到单例Bean中也不存在线程安全问题。
内容的提问来源于stack exchange,提问作者GreenSaguaro
相关产品推荐
相关产品推荐

