springboot启动流程

一张springboot启动的不错的图:一张springboot启动过程的不错的图https://www.processon.com/view/link/59812124e4b0de2518b32b6e

https://www.jianshu.com/p/603d125f21b3

https://www.jianshu.com/p/dc12081b3598

SpringApplication的构造函数实例化了 初始化上下文的各种接口--ApplicationContextInitializer以及监听器--ApplicationListener,要注意的是这里的实例化,并不像平时的Spring Components一样通过注解和扫包完成,而是通过一种不依赖Spring上下文的加载方法,这样才能在Spring完成启动前做各种配置。Spring的解决方法是以接口的全限定名作为key,实现类的全限定名作为value记录在项目的META-INF/spring.factories文件中,然后通过SpringFactoriesLoader工具类提供静态方法进行类加载并缓存下来,spring.factories是Spring Boot的核心配置文件,后面会继续说明。另外比较有意思的是两个deduce方法,Spring Boot项目主要的目标之一就是自动化配置,通过这两个deduce方法可以看出,Spring Boot的判断方法之一是检查系统中是否存在的核心类。

初始化完成之后就进到了run方法,run方法完成了所有Spring的整个启动过程:准备Environment——发布事件——创建上下文、bean——刷新上下文——结束,其中穿插了很多监听器的动作,并且很多逻辑都是靠各种监听器的实现类执行的,所以在分析run方法之前,先看下各种核心监听器、接口的作用。

@Enable* 注解就是通过在 META_INF/spring.factories 中配置 org.springframework.boot.autoconfigure.EnableAutoConfiguration 属性,其值指向对注解的解析类而实现的。学会了这段内容后,我们也可以自己设计一个 spring-boot-*-start.jar 包,并完成其自动配置了。

你可能感兴趣的:(springboot启动流程)