admin管理员组

文章数量:1794759

spring mvc的HandlerMethod简介

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。

 

本文标签: 简介springMVCHandlerMethod