一、概述
作为Spring家族的明星产品,SpringBoot极大地简化了程序员的日常开发,提高了开发效率。我们很容易得借助于SpringBoot就可以快速开发业务代码,不知道大家有没有思考过,当我们在idea中创建了一个SpringBoot项目,引入 spring-boot-starter-web 后直接运行main方法,会在控制台打印如下信息:
很明显这说明SpringBoot启动服务时,默认使用的web服务器是Tomcat,这是通过实际结果证明的,那么代码层面呢?SpringBoot是如何集成Tomcat,让其对外提供服务的呢?这就涉及到了SpringBoot的自动配置原理了,下面请看源码分析:
二、原理
1、当我们初始化一个springboot工程后,会在自动配置类 ServletWebServerFactoryAutoConfiguration 中启用内置Tomcat;
2、SpringBoot主启动类运行时,会创建Spring容器 AnnotationConfigServletWebServerApplicationContext
3、调用容器的refreshContext方法加载IOC容器;
4、执行 invokeBeanFactoryPostProcessors(beanFactory) 解析所有的自动配置类;
5、调用 onRefresh 方法,创建webServer;
6、创建Tomcat & 启动Tomcat服务,并阻塞Tomcat服务