SpringBoot启动过程分析

一、入口类分析

入口类主要有SpringApplication类的run方法进入,配合SpringBootApplication注解进行配置

image.png

SpringBootApplication注解由ComponentScan,EnableAutoConfiguration,EnableAutoConfiguration组合注解构成。
ComponentScan:可配置扫描包
EnableAutoConfiguration:注解中Import了AutoConfigurationImportSelector类在此类中会查找META-INF/spring.factories中配置的EnableAutoConfiguration
image.png

下面代码为AutoConfigurationImportSelector 中返回注入组件的代码主要由SpringFactoriesLoader加载各个jar包下META-INF/spring.factories配置的EnableAutoConfiguration类返回
image.png

image.png

spring-boot-autoconfigure-2.1.1.RELEASE.jarMETA-INF/spring.factories的自动配置类信息
image.png

二、SpringApplication之run方法

SpringApplication的静态run方法首先会根据入口类参数实例初始化SpringApplication对象,然后执行对象run方法启动。

1、实例化方法分析

此处会初始化是否是web应用,然后初始化ApplicationContextInitializerApplicationListener。初始化过程类似自动配置注解通过SpringFactoriesLoader加载各个jar包下META-INF/spring.factories配置的ApplicationContextInitializerApplicationListener

image.png

image.png
2、实例run方法分析
(1)listeners的生命周期通知处理

红圈处为listeners的生命周期通知处理

image.png

具体通知分发代码
image.png

(2)spring具体执行
  • spring容器初始化启动的主要方法为prepareContextrefreshContext方法
    prepareContext方法中主要执行listeners事件通知,ApplicationContextInitializer执行,以及加载资源信息BeanDefinitionLoader
    image.png

refreshContext方法实际执行有AbstractApplicationContext执行refresh,简单的分析refresh执行环节

spring-refresh.jpg

  • this.postProcessBeanFactory(beanFactory);
    执行当前容器的BeanFactoryPostProcessor的方法
  • this.invokeBeanFactoryPostProcessors(beanFactory);
    执行容器中所有的beanFactoryPostProcessors
  • this.registerBeanPostProcessors(beanFactory);
    注册容器中所有属于BeanPostProcessor组件到容器,在实例初始化前后执行
    this.initMessageSource();
  • this.initApplicationEventMulticaster();
    初始化Listeners分发器
  • this.onRefresh();
    web应用会在ServletWebServerApplicationContext创建web容器
  • this.registerListeners();
    applicationListeners注册进容器
  • this.finishBeanFactoryInitialization(beanFactory);
  • this.finishRefresh();
    清除资源缓存,发送完成事件,注册容器到LiveBeansView

BeanFactoryPostProcessor 一般由ApplicationContextInitializer的初始化方法或者ApplicationListener增加

image.png

image.png

web环境下context实际为ServletWebServerApplicationContext执行其中的refresh会转到AbstractApplicationContext执行然后接着会在onRefresh中创建webServer内置web容器
image.png

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容