天天看點

spring mvc的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,他們的繼承關系如下:

繼續閱讀