🎉🎉《Spring Boot实战案例合集》目前已更新143个案例,我们将持续不断的更新。文末有电子书目录。
💪💪永久更新承诺
我们郑重承诺,所有订阅合集的粉丝都将享受永久免费的后续更新服务。
💌💌如何获取
订阅我们的合集《点我订阅》,并通过私信联系我们,我们将第一时间将电子书发送给您。
环境:SpringBoot3.4.2
1. 简介
在Spring MVC中,Controller作为请求处理的核心组件,其底层调用逻辑(如InvocableHandlerMethod)为开发者提供了深度定制的空间。本篇文章我们将深入底层逻辑,详细的介绍每一个可扩展的点。如下Controller接口调用的核心逻辑源码如下:
RequestMappingHandlerAdapter#invokeHandlerMethod
在深入理解Spring MVC底层机制的基础上,本文将系统解析WebDataBinderFactory(参数绑定核心)与 InvocableHandlerMethod(方法调用引擎)的源码协作逻辑,并基于这两大组件实现如下功能:
2.1 WebDataBinderFactory
该类的核心作用是创建并配置 WebDataBinder 实例,负责将请求参数到 JavaBean 的数据绑定以及进行数据类型的转换,同时还支持通过 @InitBinder 自定义绑定规则。
数据绑定
接下来,我将通过Mock形式演示数据类型的绑定及类型转换
// 1.创建web绑定初始化器,其就是设置类型转换器等ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer() ;initializer.setConversionService(new FormattingConversionService()) ;// 2.创建数据绑定工厂WebDataBinderFactory factory = new ServletRequestDataBinderFactory(null , initializer) ;// 3.模拟http请求对象MockHttpServletRequest request = new MockHttpServletRequest() ;request.setParameter("name", "Spring Boot3实战案例200讲") ;request.setParameter("price", "70") ;NativeWebRequest webRequest = new ServletWebRequest(request) ;// 数据绑定Product target = new Product() ;WebDataBinder binder = factory.createBinder(webRequest, target, "user") ;binder.bind(new ServletRequestParameterPropertyValues(request)) ;System.err.println(binder.getTarget()) ;
运行结果
Product


