這篇文章中簡單分析了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,他們的繼承關系如下: