spring boot http接口单元测试运行流程分析
文章图片
文章图片
文章图片
【spring boot http接口单元测试运行流程分析】
文章图片
文章图片
文章图片
文章图片
文章图片
HandlerMappingIntrospector的initHandlerMappings()具体逻辑如下:
private static List initHandlerMappings(ApplicationContext applicationContext) {
Map beans = BeanFactoryUtils.beansOfTypeIncludingAncestors(
applicationContext, HandlerMapping.class, true, false);
if (!beans.isEmpty()) {
List mappings = new ArrayList<>(beans.values());
AnnotationAwareOrderComparator.sort(mappings);
return Collections.unmodifiableList(mappings);
}
return Collections.unmodifiableList(initFallback(applicationContext));
}
文章图片
可以看到beans的数量为8,此时HandlerMappingIntrospector.handlerMappings属性值已经被赋值了。
private void filterAndRecordMetrics(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
Object handler;
try {
handler = getHandler(request);
//1
}
catch (Exception ex) {
logger.debug("Unable to time request", ex);
filterChain.doFilter(request, response);
return;
}
//
filterAndRecordMetrics(request, response, filterChain, handler);
}
第1处获取HandlerMethod; 第2处,继续执行doFilter()方法,最终在MockFilterChain.doFilter()执行到DispatcherServlet.doDispatch(request, response);
文章图片
其中mappedHandler = getHandler(processedRequest); 获取HandlerExecutionChain。
Determine handler adapter for the current request.
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
在上面codwe块中获取合适的HandlerAdapter。
文章图片
中根据mappedHandler得到HandlerMethod
文章图片
中依据HandlerMethod利用反射技术去调用目标类,获得返回值。
推荐阅读
- 问题MappingJacksonHttpMessageConverter ClassNotFoundException
- SpringBoot中的Condition包下常用条件依赖注解案例介绍
- springmvc之@Controller@RequestMapping等注解解说
- Spring mvc中@RequestMapping 基本用法
- 数据结构与算法|数据结构(第二章(一))
- 如何用栈实现递归与非递归的转换
- 安卓 okhttp小结
- 关于服务网关Spring|关于服务网关Spring Cloud Zuul(Finchley版本)
- spring|spring security 自定义Provider 如何实现多种认证
- Android传统HTTP请求get----post方式提交数据(包括乱码问题)