public class RouteDefinition {
// 唯一id
private String id;
// 断言定义
private List predicates = new ArrayList<>();
// 过滤器定义
private List filters = new ArrayList<>();
// 跳转uri
private URI uri;
// 元数据
private Map<String, Object> metadata = new HashMap<>();
// Spring优先级
private int order = 0;
}
复制代码
断言定义PredicateDefinition
=======================
从配置文件加载的断言定义,构造Route时,会用RoutePredicateFactory#applyAsync转换成AsyncPredicate。
public class PredicateDefinition {
private String name;
private Map<String, String> args = new LinkedHashMap<>();
public PredicateDefinition() {
}
// predicates:
// - Path=/echo // 解析’Path=/echo’放入args
public PredicateDefinition(String text) {
int eqIdx = text.indexOf(‘=’);
// 设置name
setName(text.substring(0, eqIdx));
String[] args = tokenizeToStringArray(text.substring(eqIdx + 1), “,”);
// 设置args
for (int i = 0; i < args.length; i++) {
this.args.put(NameUtils.generateName(i), args[i]);
}
}
}
复制代码
路由过滤器定义FilterDefinition
=======================
从配置文件加载的路由过滤器定义,构造Route时,会用GatewayFilterFactory#apply转换为GatewayFilter。
public class FilterDefinition {
private String name;
private Map<String, String> args = new LinkedHashMap<>();
public FilterDefinition() {
}
// 解析配置文件 PrefixPath=/httpbin
public FilterDefinition(String text) {
int eqIdx = text.indexOf(‘=’);
if (eqIdx <= 0) {
setName(text);
return;
}
setName(text.substring(0, eqIdx));
String[] args = tokenizeToStringArray(text.substring(eqIdx + 1), “,”);
for (int i = 0; i < args.length; i++) {
this.args.put(NameUtils.generateName(i), args[i]);
}
}
}
复制代码
获取路由定义RouteDefinitionLocator
============================
RouteDefinitionLocator具有获取路由定义的能力。
public interface RouteDefinitionLocator {
Flux getRouteDefinitions();
}
复制代码
最后对外暴露的实际是CompositeRouteDefinitionLocator,他组合了所有RouteDefinitionLocator。
![](https://img-blog.csdnimg.cn/img_convert/b075e72cebbb8c 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 da7634379b698c2012.png)
获取路由RouteLocator
================
RouteLocator具有获取路由R