阿男的小窝

View the Project on GitHub

Resteasy当中SpringContextLoaderListener的工作机制

下面是一个SpringContextLoaderListener的基础配置:

其中ResteasyBootstrap里面会把ResteasyDeployment设置好:

从上面的代码还可以看到deployment被放进了servletContext。下面是contextInitialized()方法的时序图:

回过头看SpringContextLoaderListener,这里面核心的方法是customizeContext()

下面是customizeContext()方法的时序图:

这个方法把servletContext注入了springContextLoaderSupport。看下SpringContextLoaderSupport

可以看到在SpringContextLoaderSupport里面,把servletContext里面保存的RestesyDeployment取出来,并传给SpringBeanProcessorconstructor,完成了resteasy-spring的初始化流程。

上面讲解到的相关classes总结如下:

接下来看看resteasy提供的另一种spring集成加载方式。

对比ResteasySpringDispatcherServlet的启动流程

除了上面的基础是使用方法,resteasy-spring还提供了ResteasySpringDispatcherServlet用来启动容器,可以看看这种方法的启动过程,做为比较和参考。

下面是使用ResteasySpringDispatcherServlet的一个基础配置:

可以看到没有使用到ResteasyBootstrapSpringContextLoaderListener做为Listener配置进去,而是使用了一个resteasy-spring-mvc-servlet.xml的配置文件。看下这个文件的内容:

这个配置文件的核心是它包含的这个springmvc-resteasy.xml这个配置文件。这个文件是resteasy-spring模块自己提供的,看下它的内容:

如上所示,这个配置文件分为两大块,一块是Resteasy setup,还有一块是Resteasy Spring MVC setup。我们不管Resteasy Spring MVC setup这部分,就看基础部分,从上面的截图可以看到,其实它的核心也是设置ResteasyDeploymentSpringBeanProcessor

以上是对resteasy-spring提供的两种加载方法的分析。