调度处理器
Spring WebFlux,像Spring MVC一样,是围绕中央WebHandler的前端控制器模式设计的。DispatcherHandler提供了一个用于请求处理的共享算法,而实际是可配置的、委托组件执行的。模式十分灵活,并且支持不同的工作流。
DispatcherHandler从Spring配置中发现它需要的委托组件。它也被设计成一个Spring bean本身,并实现ApplicationContextAware以访问它运行的上下文。它将一个请求处理链放在webHandler API中描述。如果DispatcherHandler用bean名称“webHandler”声明,则由WebHttpHandlerBuilder发现。
Spring配置在WebFlux应用程序通常包含:
DispatcherHander bean —— webHandler
WebFilter 和 WebExceptionHandler
其他
配置
WebHttpHandlerBuilder
配置处理链
ApplicationContext context = ...
HttpHandler handler = WebHttpHandlerBuilder.applicationContext(context);
由此产生的HttpHandler已经准备好与服务器适配器一起使用。
特殊bean类型
DispatcherHandler委派到特殊bean处理请求并呈现出适当的响应。根据特殊bean对象,指的是在下表中列出的框架契约之一的Spring管理对象实例
bean类型 | 描述 |
---|---|
HandlerMapping(处理器映射器) | 将请求映射到一个处理程序,映射是基于某些标准的细节通过HandlerMapping实现——注解处理器简单的URL模式映射。主要的HandlerMapping实现类是RequestMappingHandlerMapping的基于@RequestMapping的注解方法。RouterFunctionMapping基于功能性端点路由。还有SimpleUrlHandlerMapping明确注册的URL路径处理模式 |
HandlerAdapter (处理器适配器) | 帮助DispatcherHandler调用处理程序映射到一个请求,而不管处理程序如何被调用。例如,调用带注解的控制器需要解析注解。HandlerAdapter的主要目的是保护DispatcherHandler具体实现细节 |
HandlerResultHandler | 处理程序调用并最终完成响应的结果。HandlerResultHandler的具体实现ResponseEntityResultHandler支持ResponseEntity返回值,ResponseBodyResultHandler支持@ResponseBody注解,ServerResponseResultHandler支持ServerResponse返回功能性端点。ViewResolutionResultHandler返回View和Model |
框架配置
DispatcherHandler检测它在ApplicationContext中需要的特殊bean,应用程序可以声明在DispatcherHandler希望拥有的特殊bean。大多数应用程序将会找到一个更好的出发点在WebFlux Java配置中提供更高级别的配置API,依次进行必要的bean声明。请看具体的WebFlux Java Config配置
处理
DispatcherHandler流程要求如下:
每个HandlerMapping被要求找到一个匹配的处理程序,并使用第一个匹配。
如果发现了一个处理程序,它将通过一个适当的HandlerAdapter执行,它将执行的返回值作为HandlerResult公开
HandlerResult由一个合适的HandlerResultHandler提供,并且直接编写成响应,或使用一个视图呈现内容