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 等详解

Spring MVC注解Controller源码流程解析--映射建立

面试:给我说一下Spring MVC拦截器的原理?

Spring Boot 如何获取 Controller 方法名和注解信息?