对RESTEasy当中Context和Registry的分析

现在的思路是把AbstractReaderInterceptorContext这条线看清楚。看它的process(…)方法,在这里加入tracing info。下面是context相关的classes:

上面的classes共同实现的是javax.ws.rs.ext.InterceptorContext接口。这个接口是JAX-RS的spec标准,而各种registry classes则是RESTEasy自己的实现。

Registry的相关classes

registry classes的实现在这里:

接下来要搞清楚registry和context之间的调用关系,总之最终目的是得到匹配的interceptor。下面是所有registries的实现:

那么registry和context之间有什么联系呢?从类图的分析来看,registry像是用来匹配interceptors,而context则是用来使用interceptors。

目前的分析来看,registry应该是RESTEasy自己实现的一个机制,和context这边的设计是相互独立的,没什么用,可以先放放,不管这些registries。

TODO:具体还要更深入的分析

context主要看proceed(...)方法,举例AbstractReaderInterceptorContext

关键是找到处理request的整个入口位置,然后找到response的出口位置。一些线索:

下面是ResourceMethodInvoker以及相关的class diagram:

从上面的图可以看出几件事儿:

所以我们需要理清哪一个context被谁使用的问题。下面是一些分析结果:

以上是对RESTEsay的registry和contexts的分析。