- @ServletComponentScan负责扫描@WebServlet,每个Servlet对应一个ServletContextInitializer(接口),对应的实现类是ServletRegistrationBean
- SpringApplication.run(Application.class)里面会去创建一个ServletWebServerApplicationContext,最终会调用该类的onRefresh方法
- 调用createWebServer方法创建并启动Tomcat
- 在创建的Tomcat的过程中会创建一个TomcatStarter,并且在创建TomcatStarter时将ServletContextInitializer传进去,TomcatStarter实现了ServletContainerInitializer接口,该接口是Servlet规范中的接口
- 启动Tomcat
- 启动Tomcat后,Tomcat会负责调用TomcatStarter中的onStartup方法
- 循环调用每个ServletContextInitializer的onStartup方法,并且把servletContext传给ServletContextInitializer
- 最终在ServletRegistrationBean中将ServletRegistrationBean对应的Servlet添加到servletContext中