DispatcherServlet中的getHandlerAdapter方法:
![](https://img.haomeiwen.com/i15186013/c2eb28e8cfff23bc.png)
跟踪supports方法,发现实现类有5个:
![](https://img.haomeiwen.com/i15186013/f0c37460d70de540.png)
进入SimpleControllerHandlerAdapter看一下:
@Override
public boolean supports(Object handler) {
return (handler instanceof Controller);
}
是看自己写的controller是不是实现了Spring的Controller接口。但是查看公司的代码,或平时自己写的demo,并未实现Controller接口。我们经常使用的是注解@RequestMapping,所以进入AnnotationMethodHandlerAdapter看一下:
@Override
public boolean supports(Object handler) {
return getMethodResolver(handler).hasHandlerMethods();
}
跟踪方法hasHandlerMethods:
// HandlerMethodResolver.java
public final boolean hasHandlerMethods() {
return !this.handlerMethods.isEmpty();
}
// 看到了RequestMapping
protected boolean isHandlerMethod(Method method) {
return AnnotationUtils.findAnnotation(method, RequestMapping.class) != null;
}
网友评论