【HBZ分享】Springboot启动过程

Springboot启动过程大致上分为3步

1. 初始化阶段
  1. 此阶段会创建一个SpringApplication实例,并设置实例的资源、环境、监听器、构造器。
2. 应用启动过程
  1. 该阶段会创建监听器模块、创建并设置环境实例、设置banner、构建应用上下文对象
3.自动化配置
  1. @SpringBootApplication继承了@EnableAutoConfiguration注解,该注解导入了一个AutoConfigurationImportSelector.class实例,该类会扫描类路径上的jar包,如果在META-INF/下有spring.factories文件,它就会通过SpringFactoriesLoader.loadFactoryNames方法加载这个文件中的全路径类名到spring容器中。
    loadFactoryNames()需要类加载器和全路径类名才能加载一个类。

细节分析Springboot过程做了啥

构造SpringApplication实例

1、把参数设置到SpringApplication属性中,这个参数可以是任何类型的参数.
2、判断是否是web程序,并设置到webEnvironment的boolean属性中.
3、创建并初始化ApplicationInitializer,设置到initializers属性中 。
4、创建并初始化ApplicationListener,设置到listeners属性中 。
5、初始化主类mainApplicationClass。

调用run方法,启动SpringApplication

1、构造一个StopWatch计时器,用来记录SpringBoot的启动时间 。
2、初始化监听器,获取SpringApplicationRunListeners并启动监听,用于监听run方法的执行。
3、创建并初始化ApplicationArguments,获取run方法传递的args参数。
4、创建并初始化ConfigurableEnvironment(环境配置)。封装main方法的参数,初始化参数,写入到 Environment中,发布 ApplicationEnvironmentPreparedEvent(环境事件),做一些绑定后返回Environment。
5、打印banner和版本。
6、构造Spring容器(ApplicationContext)上下文。先填充Environment环境和设置的参数,如果application有设置beanNameGenerator(bean)、resourceLoader(加载器)就将其注入到上下文中。调用初始化的切面,发布ApplicationContextInitializedEvent(上下文初始化)事件。
7、SpringApplicationRunListeners发布finish事件。
8、StopWatch计时器停止计时,日志打印总共启动的时间。
9、发布SpringBoot程序已启动事件(started())
10、调用ApplicationRunner和CommandLineRunner
11、最后发布就绪事件ApplicationReadyEvent,标志着SpringBoot可以处理就收的请求了(running())

你可能感兴趣的:(spring,boot,spring,java)