Maybrittnelson / gateway-demo

Spring Cloud Gateway
1 stars 0 forks source link

ShortcutConfigurable分析 #10

Open Maybrittnelson opened 5 years ago

Maybrittnelson commented 5 years ago

shortcutType

作用时机:args转成properties 默认类型都是default。也可以转换成特定的数据结构。如org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory#shortcutType

shortcutFieldPrefix

作用时机:properites中去除prefix到config 默认是“”。也可以添加前缀。如org.springframework.cloud.gateway.handler.predicate.WeightRoutePredicateFactory#shortcutFieldPrefix

shortcutFieldOrder

作用时机:normalize中 默认是空list。也可以指定字段的顺序。如org.springframework.cloud.gateway.handler.predicate.WeightRoutePredicateFactory#shortcutFieldOrder

org.springframework.cloud.gateway.support.ShortcutConfigurable#getValue代码片段

作用时机:获取上下文的bean解析器参考或者直接赋值string


if (rawValue != null && rawValue.startsWith("#{") && entryValue.endsWith("}")) {
// assume it's spel
StandardEvaluationContext context = new StandardEvaluationContext();
context.setBeanResolver(new BeanFactoryResolver(beanFactory));
Expression expression = parser.parseExpression(entryValue,
new TemplateParserContext());
value = expression.getValue(context);
}
## org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#lookup代码片段
    Map<String, String> args = predicate.getArgs();
    Map<String, Object> properties = factory.shortcutType().normalize(args, factory, this.parser, this.beanFactory);
    Object config = factory.newConfig();
    ConfigurationUtils.bind(config, properties, factory.shortcutFieldPrefix(), predicate.getName(),
            validator, conversionService);