resteasy-spring,resteasy-spring-boot和resteasy的servlet容器差别
「resteasy-spring」,「resteasy-spring-boot」和「resteasy standalone」的加载过程是各自独立的。总结如下:
- 「resteasy-spring」使用
springmvc-resteasy.xml进行容器的初始化与加载,而springmvc-resteasy.xml会配置处理每次请求的class为ResteasyHandlerAdapter。 - 「resteasy-spring-boot」使用自己的
ResteasyAutoConfiguration和一系列的classes进行容器的加载。 - 「resteasy standalone」使用
HttpServletDispatcher或者FilterDispatcher进行容器的加载,它们两个共同使用底层的ServletContainerDispatcher。 
虽然上面三种环境下容器的加载机制不同,但是它们的逻辑是共通的,下面逐一分析,通过详细的分析可以看到这点。
resteasy-spring
「resteasy-spring」使用的是springmvc-resteasy.xml进行的容器配置:

里面的核心包括:
ResteasyDeploymentRegistryDispatcherProviderFactory
这些是resteasy里面通用的基础组件。接下来是resteasy-spring自己特定的组件,分别是:
SpringBeanProcessorResteasyHandlerAdapter
其中SpringBeanProcessor负责初始化上面的四个核心组件,而ResteasyHandlerAdapter负责处理每次的实际请求。
下面是resteasy-spring的整体设计:

具体看下SpringBeanProcessor:

如上图所示,这里面有一个「inner class」叫做ResteasyBeanPostProcessor,把它提取出来,看看里面的核心逻辑,就是postProcessAfterInitialization()这个方法:
.jpg)
我们可以看到对ResteasyDeployment这个核心组件的加载,也就是调用它的start()方法。具体到处理每一次请求,使用的是ResteasyHandlerAdapter:

具体处理请求的是里面的handle()方法:
.jpg)
resteasy-spring-boot
「resteasy-spring-boot」使用ResteasyAutoConfiguration:

在ResteasyAutoConfiguration里面,核心的配置流程是resteasyBootstrapListener()这里,这里面初始化了一个ServletContextListener,我把它给拆出来,看下具体的逻辑:
.jpg)
从上面也可以看到对ResteasyDeployment.start()的调用。
resteasy standalone
「resteasy」独立使用,并且被部署到「servlet」容器里面去。HttpServletDispatcher和FilterDispatcher都包含ServletContainerDispatcher:

所以核心是ServletContainerDispatcher。下面是ServletContainerDispatcher.init()的加载逻辑:
.jpg)
从上面的时序图里同样可以看到ResteasyDeployment.start()的逻辑。针对每个具体服务,走的是ServletContainerDispatcher.service()方法:
.jpg)
以上是针对resteasy的resteasy-spring,resteasy-spring-boot和resteasy的servlet容器的分析。