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对象。

上一篇下一篇

猜你喜欢

热点阅读