Spring mvc之MappingRegistry类
2021-04-10 本文已影响0人
engineer_tang
1. 简介
该类是AbstractHandlerMethodMapping类的默认作用域的内部类。
方法调用栈如下:
getHandler方法->getHandlerInternal方法->lookupHandlerMethod方法
1.1 urlLookup属性
private final MultiValueMap<String, T> urlLookup = new LinkedMultiValueMap<>();
它是MultiValueMap<String, T>类型,MultiValueMap是spring-core包下定义的key-value多值Map接口定义,一个用于存储一个key对应多个值的情况。
image.png
从截图中可以看到key值就是url访问路径,而value是一个LinkedList对象。
1.2 mappingLookup属性
private final Map<T, HandlerMethod> mappingLookup = new LinkedHashMap<>();
image.png
这个属性通过是一个普通的LinkedHashMap对象,key是访问接口路径URL,value是一个HandlerMethod对象。
private void addMatchingMappings(Collection<T> mappings, List<Match> matches, HttpServletRequest request) {
for (T mapping : mappings) {
T match = getMatchingMapping(mapping, request);
if (match != null) {
matches.add(new Match(match, this.mappingRegistry.getMappings().get(mapping)));
}
}
}
通过上一步根据URL获取到的RequestMappingInfo的请求参数没问题后,再根据这个步骤获取HandlerMethod对象。