spring mvc的HandlerMethod简介
Posted 不识君的荒漠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring mvc的HandlerMethod简介相关的知识,希望对你有一定的参考价值。
在spring mvc的RequestMappingHandlerMapping注册HandlerMethod源码分析这篇文章中简单分析了HandlerMethod注册,那这次就介绍HandlerMethod这个类。
HandlerMethod封装了很多属性,在访问请求方法的时候可以方便的访问到方法、方法参数、方法上的注解、所属类等并且对方法参数封装处理,也可以方便的访问到方法参数的注解等信息。
下面,是HandlerMethodn属性字段的源码,每个属性上加了注释说明:
public class HandlerMethod
// 虽然Object类型,但是注册handlerMethod时候构造的时候有可能传入的是一个String类型的bean name
private final Object bean;
// 见名知义,我调试的时候,传入的是DefaultListableBeanFactory,如果bean属性是Sring的beanName就可以用beanName获取到对应的bean作用Handler
private final BeanFactory beanFactory;
// 方法所属类
private final Class<?> beanType;
// 注册的方法
private final Method method;
// 被桥接的方法,如果method是原生的,这个属性的值就是method
private final Method bridgedMethod;
// 封装方法参数的类实例,一个MethodParameter就是一个参数
private final MethodParameter[] parameters;
// Http状态码
private HttpStatus responseStatus;
// ResponseStatus注解的reason值
private String responseStatusReason;
private HandlerMethod resolvedFromHandlerMethod;
//...
顺便提下:
HandlerMethod还有两个子类,分别为InvocableHandlerMethod和ServletInvocableHandlerMethod,他们的继承关系如下:
InvocableHandlerMethod是在HandlerMethod上增加了调用的功能,而ServletInvocableHandlerMethod是在InvocableHandlerMethod增加了返回值和响应状态码的处理,另外在ServletInvocableHandlerMethod有个内部类ConcurrentResultHandlerMethod继承于它,支持异常调用结果处理。在查找到Handler适配器时候发起对方法调用的便是用ServletInvocableHandlerMethod。
以上是关于spring mvc的HandlerMethod简介的主要内容,如果未能解决你的问题,请参考以下文章
spring mvc的RequestMappingHandlerMapping注册HandlerMethod源码分析
源码剖析Spring MVC如何将请求映射到Controller?
Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解