1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| 1.DispatcherHandler Spring Webflux 的核心类, 负责协调 HandlerMapping 和 HandlerAdapter
2.HandlerMapping Spring Webflux 的核心类, 负责根据请求信息查找 handler
3.HandlerAdapter Spring Webflux 的核心类, 负责执行 handler 4.RoutePredicateHandlerMapping Spring Gateway 实现的 HandlerMapping, 负责根据谓词查找 Route 对象并返回 handler(FilteringWebHandler)
5.FilteringWebHandler 是一个 handler 用于获取 route 对象的信息(主要是 GatewayFilter), 然后封装所有拦截器(包括 GlobalFilter)到 DefaultGatewayFilterChain, 挨个执行, 倒叙回归. 6.RoutePredicateFactory 谓词实现类的工厂类 负责创建具体的谓词工厂(如 Path, Method, Before 等) apply() 返回一个 Predicate 7.Predicate 定义了 test 方法, 返回 Boolean 值, true 代表匹配, false 代表不匹配(指匹配 Route) 8.GlobalFilter/GatewayFilter 定义了一个拦截方法, 可拦截请求进行相应处理 9.AsyncPredicate/AndAsyncPredicate AsyncPredicate 本质上是一个方法(单方法接口), 方法被调用时会调用保存的 Predicate 类型字段的 test() 方法. AndAsyncPredicate 是一个左右结构的 AsyncPredicate, 进行判断时先判断左边, 再判断右边 若不断的 and, 会形成树结构. 所以执行时类似遍历二叉树.
10.RouteDefinitionRouteLocator 负责从不同的 Locator(如配置文件) 获取 RouteDefinition, 并负责将 RouteDefinition 转成 Route 对象 11.RouteDefinition 包含有路由的所有配置信息, 含谓词, 拦截器, id, url 等等, 但都是字符串. 12.Route 含有的配置信是转化好了的, 如 Predicate 和 GatewayFilter. 13.NettyRoutingFilter 使用 netty 发送 http/wss 等请求.
14.GatewayFilterFactory 拦截器实现类的工厂类 负责创建具体的 GatewayFilter 对象.
15.AbstractConfigurable 负责处理谓词的配置和拦截器的配置转化成不同的 Class 配置. 实际上由 shortcutFieldOrder 属性配合 Binder 实现. 即按 shortcutFieldOrder 配置的字段列表, 按顺序从 PropertySource 中读取数据进行绑定; 而 PropertySource 则是从 RouteDefinition 的配置信息加入到 Map 后再用 MapConfigurationPropertySource 包装 Map 而得到的.
|