webflux源码学习笔记
其他
2021-02-28 15:30:04
阅读次数: 0
系统初始化
- DispatcherHandler.setApplicationContext => initStrategies()
1.1 获取系统中的HandlerMapping {
RequestMappingHandlerMapping,
RouterFunctionMapping,
SimpleUrlHandlerMapping
}
1.2 获取系统中的HandlerAdapter{
RequestMappingHandlerAdapter,
HandlerFunctionAdapter,
SimpleHandlerAdapter
}
1.3 获取系统中的HandlerResultHandler{
ResponseEntityResultHandler,
ResponseBodyResultHandler,
ViewResolutionResultHandler,
ServerResponseResultHandler
}
- RouterFunctionMapping.afterPropertiesSet => initRouterFunctions()
2.1 获取系统中所有的RouterFunction{
SortedRouterFunctionsContainer container = new SortedRouterFunctionsContainer();
obtainApplicationContext().getAutowireCapableBeanFactory().autowireBean(container);
return CollectionUtils.isEmpty(container.routerFunctions) ? Collections.emptyList() :
container.routerFunctions;
// 自定义的routeFunction为SameComposedRouterFunction
}
2.2 其中obtainApplicationContext().getAutowireCapableBeanFactory().autowireBean(container);
触发自定RouterConfig初始化,并组装为SameComposedRouterFunction实例
2.3 将RouterFunction连接成一个SameComposedRouterFunction链(一个接一个)
接收请求并将请求转发到DispatcherHandler
- ChannelOperations.applyHandler
=> ReactorHttpHandlerAdapter.apply(request,response){
ServerHttpRequest adaptedRequest = new ReactorServerHttpRequest(request, bufferFactory);
ServerHttpResponse adaptedResponse = new ReactorServerHttpResponse(response, bufferFactory);
}
=> HttpWebHandlerAdapter.handle(adaptedRequest, adaptedResponse){
ServerWebExchange exchange = createExchange(request, response);
}
=> DispatcherHandler.handle.(exchange)
DispatcherHandler处理请求
- 调用HandlerMappings获取Handler
=> invokeHandler(exchange, handler)
=> handleResult(exchange, result)
- invokeHandler(exchange, handler)
2.1 调用HandlerAdapter.handle(exchange, handler)
2.2 RouterFunctionMapping.handle => getHandlerInternal(){
ServerRequest request = ServerRequest.create(exchange, this.messageReaders);
}
2.3 调用routerFunction:SameComposedRouterFunction.route(request);
- handleResult(exchange, result)
3.1 遍历系统中所有HandlerResultHandler并调用supports(result),刷选出合适的HandlerResultHandler
3.2 执行HandlerResultHandler.handleResult(exchange, result)将结果输出response
转载自blog.csdn.net/yichengjie_c/article/details/112229875