多语言展示
当前在线:1232今日阅读:91今日分享:37

HandlerMethodArgumentResolver策略模式分析

在开发java的web项目的时候,如果使用的是基于springmvc,则web请求参数的解析是使用HandlerMethodArgumentResolver策略模式来处理的,因为不同类型和方式的参数,需要多种不同的解析器,使用策略模式是最好不过了,可以方便进行新的参数类型进行拓展解析,同时也把不同的解析逻辑分别封装到了各个解析器中,增加了代码的可读性,下面就来介绍下这个策略模式的使用
工具/原料
1

java

2

spring mvc

方法/步骤
1

首先使用idea打开spring的源码HandlerMethodArgumentResolver接口,然后在菜单中选择Navigate》Type Hierarchy,或者直接按快捷键F4

2

则会打开HandlerMethodArgumentResolver类型结构体系界面,可以看到该接口的所有实现类,如图所示可以发现,这些实现类都是不同类型的解析器

3

HandlerMethodArgumentResolver接口里resolveArgument和supportParameter两个方法,resolveArgument负责解析参数,supportParameter用来验证是否适合解析某种类型的参数,所有实现类都实现了这两个方法

4

打开InvocableHandlerMethod类,然后定位到getMethodArgumentValues方法,这个方法就解析参数的入口地方

5

HandlerMethodArgumentResolverComposite类虽然也实现了HandlerMethodArgumentResolver接口,但它实际上不是解析器,而且负责遍历其它所有解析器的类,然后把已经匹配过的解析器和参数方法进行缓存保存

6

打开其中一个具体解析器类,如RequestResponseBodyMethodProcessor类,supportParameter方法验证参数带有RequestBody的注解条件,resolveArgument是实际的解析参数的地方

7

通过上面可以看到,每个具体策略类中,都有具体的解析参数的逻辑,同时也封装了该策略类的条件,在时间调用的地方,循环遍历所有的具体策略类,根据特定的条件进入到对应的策略方法中

注意事项

spring代码里使用到策略模式的地方很多,大家可以自己试着参考和学习下

推荐信息