You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中@GetMapping方法注入对象参数的实例创建原理疑问

Spring MVC请求方法自定义类型参数注入原理

该注入逻辑和类构造注入无关,属于Spring MVC处理HTTP请求阶段的请求方法参数解析机制,具体流程如下:

  • 容器启动阶段:标注了@Component的Cat类默认采用单例作用域,会在Spring容器初始化时就创建好全局唯一的实例,代码中Cat无参构造的打印逻辑会在项目启动时输出一次,不会在每次请求时触发。
  • 请求处理阶段:当HTTP请求匹配到@GetMapping对应的接口时,DispatcherServlet会先调度参数解析组件HandlerMethodArgumentResolver对目标方法的所有入参逐一处理:
    • 标注了@PathVariable的name参数,由路径变量解析器从请求URL中提取对应值完成赋值
    • Cat这类自定义Bean类型的入参,由对应解析器直接从Spring容器中取出已经初始化完成的Cat Bean,赋值给方法入参
  • 若Cat类调整为请求作用域(添加@Scope("request")注解),参数解析阶段会为当前请求单独创建一个新的Cat实例,此时无参构造的打印会在每次请求时触发。

注意:当前代码中Cat默认是单例Bean,多个请求同时修改name属性会出现线程安全问题,生产环境禁止使用该写法。如果需要每个请求持有独立的Cat实例,建议将Cat的作用域调整为request或者prototype。

相关参考可查阅Spring Framework官方文档中Web Servlet栈的Handler Methods相关章节,里面有完整的请求方法参数支持类型和解析规则说明。

内容的提问来源于stack exchange,提问作者Cepheon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:15:01