Spring boot启动
第一步,启动main方法,
创建 SpringApplication 实例:new springApplication(),
SpringApplication 是启动 Spring Boot 应用的核心类。它负责启动应用的上下文,并执行所有必要的初始化步骤 。 这里推断应用类型,是web还是普通应用,设置初始化器,监听器
(我记得推断应用类型,是判断类路径中存在servlet 相关类,就是web类)
第二步,调用run方法,真正启动流程就在这里,
准备上下文:
在 run 方法中,首先会准备一个 ApplicationContext
1)加载配置:
根据 @SpringBootApplication 中的设置,加载应用的配置文件(如 application.properties 或 application.yml),系统变量,命令行参数,将其转化为配置属性(最终封装成configureableEnvironment ),这一步就是把配置全准备好
2)执行自动装配:通过 @EnableAutoConfiguration 注解,Spring Boot 会自动装配必要的组件。例如,如果存在数据库驱动,则自动配置 DataSource。
3)启动应用上下文:启动 ApplicationContext,加载配置类,componentScan 就是这在执行的。完成 Bean 的初始化和依赖注入。如果是web应用,启动tomcat服务器
4)触发 ApplicationRunner 和 CommandLineRunner:如果定义了 ApplicationRunner 或 CommandLineRunner 接口的实现类,Spring Boot 会在应用启动后自动调用它们。
5)发布applicationReadyEvent,所有启动流程结束,应用进入运行状态,准备好接收请求
原生IOC启动流程
-
加载配置资源
-
解析为BeanDefinition
-
初始化Bean工厂、执行工厂后置处理器、注册后置处理器
-
实例化单例Bean、依赖注入、生命周期
全程只管Bean
SpringBoot启动流程
-
初始化SpringApplication(准备监听器、初始化器)
-
准备运行环境、加载配置文件
-
打印Banner、创建应用上下文
-
执行自动配置(大量自动配置类生效)
-
刷新IOC容器(这里才开始走上面原生IOC全套流程)
-
启动内嵌Tomcat
-
执行收尾回调、应用就绪