美文网首页
SpringBoot启动过程分析

SpringBoot启动过程分析

作者: huangxiongbiao | 来源:发表于2018-12-12 16:22 被阅读9次

一、入口类分析

入口类主要有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

相关文章

网友评论

      本文标题:SpringBoot启动过程分析

      本文链接:https://www.haomeiwen.com/subject/fhruhqtx.html