springboot-starter-web如何整合tomcat server的

抛出疑问

springboot-starter是依靠spring.factories和spring-autoconfigure-metadata.properties来进行启动的. 那么springboot-starter-web是怎么搞的呢,我在下面并没有找到spring.factories?是怎么区分Jetty,Tomcat,Undertow的呢?又是怎么启动的呢?

溯源

  • spring-autoconfigure包下的spring.factories中有 ServletWebServerFactoryAutoConfiguration,
    这个类是启动webServer的关键类:


    1592561267587_514DCD41-59A6-4580-8634-E28387314496.png
  • 引入了jetty,tomcat,undertow的Bean。
B574AE08-C657-417e-8F0F-B8A431775653.png
  • 接下来这个Conditional就是classpath存在对应的类的时候加载对应的bean....于是乎我们大概懂了,当我们引入spring-starter-web 的时候,Tomcat.class就已经被引入了,所以这个bean就会被创建起来了~~~

  • 那么快进到SpringBootApplication


    B574AE08-C657-417e-8F0F-B8A431775653.png
  • 这里返回的applicationContext是AnnotationConfigServletWebServerApplicationContext


    B574AE08-C657-417e-8F0F-B8A431775653.png
  • 再快进到 AbstractApplicationContext.refresh方法的onRefresh方法


    B574AE08-C657-417e-8F0F-B8A431775653.png
  • ServletWebServerApplicationContext的onRefresh方法,创建webServer


    B574AE08-C657-417e-8F0F-B8A431775653.png
  • 这里的ServletWebServerFactory恰恰就是最上面的TomcatServletWebServerFactory...于是大概懂了是怎么整合的了


    B574AE08-C657-417e-8F0F-B8A431775653.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。