阿男的小窝

View the Project on GitHub

resteasy+spring+undertow(二)

(前篇:resteasy+spring+undertow

理解resteasy-spring-with-tjws的设计,用来做undertow的实现。似乎只有一处不同,就是设置了applicationContext

查看一下springmvc-example项目:

找到了配置方法:

这个配置include了默认的springmvc-servlet.xmlcomponent-scan的相关信息:

所以说应该怎样通过代码把component-scan设置好呢?想一下。

于是看了下这篇文档:

看到了相关方法:

接下来就是想想怎么把上面的配置通过代码注入到undertow里面。

于是找到spring-undertow这个项目:

这个项目里面有把spring注入undertow的方法。可以看到它有标记为@ComponentScan的class:

可以看到上面的class除了@ComponentScan,还可以用来注入配置文件app.properties。找到使用位置:

可以看到是createSpringWebAppContext(...)方法调用并加载位于ys.rest.config里面的Config

所以需要查看createSpringWebAppContext(...)方法的实现:

所以Config被封装进入了AnnotationConfigWebApplicationContext。这个context最终被Undertow的DeploymentInfo所使用:

因为我不需要ContextLoaderListener,所以只需要看createDispatcherServlet(...)方法(关于ContextLoaderListener,查看ContextLoaderListener vs DispatcherServlet - HowToDoInJava):

通过上面的分析,理清了undertow里面注入spring的方法。