class RouterFunctionMapping extends AbstractHandlerMapping implements InitializingBean{
// routerFunction是流式API,这个对象存储这N个RouterFunction
if (this.routerFunction == null) {
initRouterFunction();{
// 找出所有RouterFunction的bean
Map<String, RouterFunction> beans = applicationContext.getBeansOfType(RouterFunction.class);
List<RouterFunction> routerFunctions = new ArrayList<>(beans.values());
// 将所有的RouterFunction进行套娃,变成一个routerFunction
// (first(first,(first,second),second),second);这种格式
// 就类似其他的HandlerMapping用map保存一个道理
this.routerFunction = routerFunctions.stream().reduce(RouterFunction::andOther).orElse(null);
}
// 初始化消息转换器,一般来说messageConverters都不为空
if (CollectionUtils.isEmpty(this.messageConverters)) {
initMessageConverters();{
// 添加默认的消息转换器
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>(4);
messageConverters.add(new ByteArrayHttpMessageConverter());
messageConverters.add(new StringHttpMessageConverter());
if (!shouldIgnoreXml) {
messageConverters.add(new SourceHttpMessageConverter<>());
}
messageConverters.add(new AllEncompassingFormHttpMessageConverter());
this.messageConverters = messageConverters;
}
}
if (this.routerFunction != null) {
// 查看是否有路径解析
PathPatternParser patternParser = getPatternParser();
if (patternParser == null) {
// 添加一个路径解析器,解析请求路径的
patternParser = new PathPatternParser();
setPatternParser(patternParser);
}
// 将解析器封装成ChangePathPatternParserVisitor,就是对patternParser进行增强
RouterFunctions.changeParser(this.routerFunction, patternParser);{
// 将解析器封装成ChangePathPatternParserVisitor
ChangePathPatternParserVisitor visitor = new ChangePathPatternParserVisitor(parser);
// 将visitor放入每一个RouterFunction中
routerFunction.accept(visitor);
return routerFunction;
}
}
}
}