Spring Boot2.0版本源码(九):Spring Boot的Servlet容器Tomcat工厂类的加载

在主程序中,使用了@SpringBootApplication注解,它其实使用了@EnableAutoConfiguration注解来完成一系列操作,@EnableAutoConfiguration注解import了AutoConfigurationImportSelector类,
Spring Boot2.0版本源码(九):Spring Boot的Servlet容器Tomcat工厂类的加载_第1张图片
它的构造函数实现了DeferredImportSelector接口,
Spring Boot2.0版本源码(九):Spring Boot的Servlet容器Tomcat工厂类的加载_第2张图片
上一节,我们学习过Spring Boot2.0版本源码(八):Spring Boot的注解的解析出Bean之核心方法,里面的ConfigurationClassParser类解析注解的核心方法中有一个processImports()方法(该方法是在解析配置文件时调用),专门用于处理@Import注解的一个方法,处理DeferredImportSelector接口的在如下代码中实现。
Spring Boot2.0版本源码(九):Spring Boot的Servlet容器Tomcat工厂类的加载_第3张图片

handle方法会将当前的DeferredImportSelector的实现类加入到deferredImportSelectors这个需要处理的handler之中。

Spring Boot2.0版本源码(九):Spring Boot的Servlet容器Tomcat工厂类的加载_第4张图片
在解析完成以后,处理之前注入的deferredImportSelectorHandler类中的集合
Spring Boot2.0版本源码(九):Spring Boot的Servlet容器Tomcat工厂类的加载_第5张图片
process()源码如下:
Spring Boot2.0版本源码(九):Spring Boot的Servlet容器Tomcat工厂类的加载_第6张图片
下面的会使用getImports()方法,在getImports()方法内部会调用process()方法
Spring Boot2.0版本源码(九):Spring Boot的Servlet容器Tomcat工厂类的加载_第7张图片
Spring Boot2.0版本源码(九):Spring Boot的Servlet容器Tomcat工厂类的加载_第8张图片
继续跟进,在getAutoConfigurationEntry()方法内执行解析@EnableAutoConfiguration注解的过程中,会注入一个org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration类。
Spring Boot2.0版本源码(九):Spring Boot的Servlet容器Tomcat工厂类的加载_第9张图片
进入这个类,发现会将EmbeddedTomcat.class这个类注入进来。
Spring Boot2.0版本源码(九):Spring Boot的Servlet容器Tomcat工厂类的加载_第10张图片
最后由EmbeddedTomcat这个类引入了TomcatServletWebServerFactory这个工厂类。
Spring Boot2.0版本源码(九):Spring Boot的Servlet容器Tomcat工厂类的加载_第11张图片
当这个工厂被注入以后,我们上一章Spring Boot2.0版本源码(九):Spring Boot的Servlet容器启动解析整体流程中讲过ServletWebServerApplicationContext类中的refresh()方法创建一个web容器,里面会用到tomcat工厂去去实现web容器的创建。

你可能感兴趣的:(springboot源码)