ArgumentResolver 存放在哪里
时间: 2024-01-18 15:03:24 浏览: 24
在 Spring MVC 中,所有的 ArgumentResolver 都存放在 HandlerAdapter 中。HandlerAdapter 是 Spring MVC 中用于将请求分发给 Controller 方法的关键组件之一,它负责调用 Controller 方法,将请求参数绑定到方法参数上,并将方法返回值转换为响应结果。在 HandlerAdapter 中,有一个 ArgumentResolver 集合,其中存放了所有用于参数绑定的 ArgumentResolver。当请求到达 DispatcherServlet 后,HandlerAdapter 会根据请求 URL 找到对应的 HandlerExecutionChain 对象,然后遍历 HandlerExecutionChain 中的所有参数并根据类型查找对应的 ArgumentResolver。如果找到了合适的 ArgumentResolver,则调用其 resolveArgument 方法进行参数绑定。因此,ArgumentResolver 实际上是存放在 HandlerAdapter 中的,而不是存放在 Controller 中或其他地方。
相关问题
ArgumentResolver 初始化过程
ArgumentResolver 是 Spring MVC 中用于参数绑定的关键组件之一,其初始化过程如下:
1. Spring MVC 在启动时会扫描所有的 bean,通过 @ControllerAdvice、@RestControllerAdvice 等注解找到所有的全局异常处理器和全局数据绑定器;
2. 在扫描过程中,Spring MVC 会找到所有实现了 HandlerMethodArgumentResolver 接口的 bean,并将其加入到 ArgumentResolver 集合中;
3. 当请求到达 DispatcherServlet 后,Spring MVC 会根据请求 URL 找到对应的 HandlerMapping,并调用其 getHandler 方法获取 HandlerExecutionChain 对象;
4. HandlerExecutionChain 对象包含了请求对应的 Controller 方法以及其参数列表,Spring MVC 会遍历参数列表中的每个参数并根据类型查找对应的 ArgumentResolver;
5. 找到合适的 ArgumentResolver 后,Spring MVC 会调用其 supportsParameter 方法判断当前参数是否支持绑定;
6. 如果支持绑定,则调用其 resolveArgument 方法进行参数绑定;
7. 如果未找到合适的 ArgumentResolver,则抛出异常或返回 null。
在 ArgumentResolver 初始化过程中,最重要的是找到合适的 ArgumentResolver,这需要根据参数类型以及其他条件进行匹配。如果系统中有多个 ArgumentResolver 都支持绑定同一种类型的参数,那么 Spring MVC 会根据优先级顺序选择其中一个进行绑定。如果所有的 ArgumentResolver 都无法进行绑定,则抛出异常或返回 null。
spring mvc中ArgumentResolver和filter执行顺序
在Spring MVC中,Argument Resolver和Filter是两个不同的概念,它们有着不同的执行顺序。
Filter是Java Web中的一种过滤器,用于对HTTP请求进行过滤和处理。Filter的执行顺序是在Servlet容器接收到请求后,首先执行Filter,然后再进入Controller处理请求。
Argument Resolver是Spring MVC中的一种机制,用于在Controller方法中自动解析请求参数。Argument Resolver的执行顺序是在Controller方法执行之前,先执行Argument Resolver对请求参数进行解析处理,然后将解析后的参数注入到Controller方法的参数列表中。
因此,Filter的执行顺序在Argument Resolver之前,也就是说,请求首先会经过Filter进行过滤处理,然后再进入Argument Resolver进行参数解析,最后再进入Controller处理请求。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![rp](https://img-home.csdnimg.cn/images/20210720083646.png)