-
SpringApplication.run() 启动,先准备环境配置,
读取 application.yml、properties、命令行参数、环境变量、JVM 参数等。
-
Spring Boot 根据 classpath 判断应用类型。
如果有 Spring MVC、Servlet、Tomcat 相关类,就认为是普通 Web 项目,
创建支持 Web 的 Spring 容器。
-
执行容器的 refresh() 方法。
在这个过程中,@ComponentScan 会扫描我们自己写的 Controller、Service、Component 等类,
注册成 BeanDefinition。
同时 @EnableAutoConfiguration 会加载自动配置类,
根据 classpath 依赖、配置文件和条件注解决定哪些自动配置生效,
并把相关组件也注册成 BeanDefinition。
-
BeanDefinition 都准备好以后,
Spring 开始实例化非懒加载的单例 Bean,
并完成依赖注入、初始化等流程。
这时候 Controller、Service、RedisTemplate、DispatcherServlet 等对象才真正被创建出来。
-
对于 Web 项目,Spring Boot 会启动内嵌 Tomcat,
Tomcat 开始监听端口,请求进来后交给 DispatcherServlet,
最后分发到对应的 Controller 方法。
Spring Boot 启动时,先读取配置,再根据 classpath 判断应用类型并创建对应容器。进入 refresh 后,Spring 会把我们自己写的组件和自动配置提供的组件都注册成 BeanDefinition。BeanDefinition 准备好后,再统一实例化非懒加载单例 Bean,并完成依赖注入。对于 Web 项目,最后会启动内嵌 Tomcat,让项目可以接收请求。