RESTEasy的Path Matching的相关Classes

本文分析RESTEasy中,从请求路径匹配到实际资源的核心classes设计。下面是相关的classes:

Nodes之间的层级是这样的:

RootClassNode -> ClassNode <-> ClassExpression <-> RootNode -> SegmentNode <-> MethodExpression -> ResourceInvoker

所有这些Nodes都有match()方法,除了ClassNodematch()方法返回类型是RootNode以外,其它类型nodes的返回类型都是ResourceInvoker

以下是RootClassNodematch()方法:

可以看到它调用自己包含的,类行为ClassNode,名字为root的实例的match()方法。在rootmatch()方法调用后,得到类型为RootNode的object;然后再用类型为RootNode的object的match()方法,得到ResourceInvoker的实例。

接下来具体看看ClassNodematch()方法:

可以看到ClassNode是如何匹配到RootNode的全过程。可以在这个过程当中,ClassExpression的调用情况。

接下来是RootNodematch()方法调用情况:

可以看到RootNodematch()方法就是调用自己包含的,类型为SegmentNode,名字为root的实例的match()方法。

最后看SegmentNodematch()方法:

上面是通过SegmentNode实际匹配到ResourceInvoker的全过程,注意这里面对MethodExpression的使用。

整个上面的流程,在ResourceMethodRegistry的入口是getResourceInvoker()方法:

可以看到整个匹配路径的入口,根据是否为widerMatching的条件的不同,要么是RootNode,要么是RootClassNode

总结一些要点:

以上是一些简单的分析,具体的匹配过程在这篇文章里先不展开分析了,找机会单开一篇文章来写。