Springboot源码解读启动过程

本文深入探讨SpringBoot启动过程的源码,从创建SpringApplication对象到run方法的执行,详细解析了启动流程,包括环境准备、上下文刷新、Web服务器的启动以及@SpringBootApplication注解的含义。文章旨在帮助读者理解SpringBoot的启动机制和内部工作原理。
摘要由CSDN通过智能技术生成

来解读下springboot启动过程的源码,了解所有的实现与启动顺序。

这段代码都懂,就这么两行代码,就把我们的整个项目启动完成了。
springboot1
那么到底是什么原理呢?来探究下

启动总纲

练功得先有武功秘籍总纲,所以我们先来说下启动的整个流程机制,然后才来挖掘源码细节。
我们的springboot也是依赖了spring,所以也是有spring的启动过程的,当我们启动项目时,spring容器就会初始化,过程如下:
spring1

  1. spring启动过程中有invokeBeanFactoryPostProcessors方法,里面会去解析spring的配置类,在解析lite类型的配置类时,会解析以下注解spring2
  2. 此时就会通过\@ComponentScan来扫描我们项目配置的bean
  3. 然后再解析\@Import注解,如果是实现了DeferredImportSelector接口的Import,则先存起来,等所有的配置类都解析完成了再解析该类型的。可以查看源码org.springframework.context.annotation.ConfigurationClassParser#processImports
  4. springboot的@SpringBootApplication注解里面就是有个@Import(AutoConfigurationImportSelector.class)类,该类就是实现了DeferredImportSelector接口,所以springboot自定义的配置类的优先级都是低于我们自己配置的
  5. AutoConfigurationImportSelector类就会去加载spring.factories配置文件里面的配置spring3
  6. 优先级:这些AutoConfiguration配置类里面都是有\@Conditional注解的,满足该自动配置类的条件才会去加载该类(比如我们pom文件引入了依赖才会去加载),配置类里还会有各种@Bean,这些都是要解析的,但是会去判断是否已经加载了该bean(即我们程序员定义的),没有加载才会去加载spring4
  7. 然后会去过滤一些自动配置类,因为不是所有spring.factories文件里的配置类都会去加载,会有一些排除措施
  8. 执行run方法,启动springboot容器相关信息
  9. 配置类加载完了,就会去加载最上面流程中的onRefresh(),这个方法springboot重写了,springboot重写的这个方法会去启动tomcat服务器
  10. 最后发布一些springboot启动完成的事件

spring5

整个springboot启动加载过程就是这样了,下边会讲述一些启动源码,但是不涉及spring启动的源码。

new SpringApplication对象

我们java都是从main方法开始的,所以我们也从这里开始:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值