Spring Boot启动流程

1:判断是否是web环境

2:加载classpath下所有的META-INF/spring.factories  ApplicationContextInitializer

3:加载classpath下所有的META-INF/spring.factories  ApplicationListener

4:推断main方法所在的类

5:开始执行run方法

6:设置java.awt.headless系统变量

7:加载classpath下所有的META-INF/spring.factories  SpringApplicationRunListener

8:执行所有SpringApplicationRunListener的started方法

9:实例化ApplicationArguments对象

10:创建environment

11:配置environment,主要是把run方法的参数配置到environment里

12:执行所有SpringApplicationRunListener的environmentPrepared方法

13:如果不是web环境,但是是web的environment,则把这个web的environment转换成标准environment

14:打印Banner

15:初始化applicationContext

    如果是web环境,则实例化AnnotationConfigEmbeddedApplicationContext对象

    如果不是web环境:AnnotationConfigApplicationContext

16:如果beanNameGenerator不为空,就把beanNameGenerator对象注入到context里

17:回调所有的ApplicationContextInitializer方法

18:执行所有的SpringApplicationRunListener的contextPrepared方法

19:依次往spring容器中注入ApplicationArguments, Banner

20:加载所有的源到context里

21:执行所有的SpringApplicationRunListener的contextLoaded方法

22:执行context的refresh方法,并调用context的registerShutdownHook方法

23:回调,获取容器中所有的ApplicationRunner,CommandLineRunner接口,然后排序依次调用

24:执行所有的SpringApplicationRunListener的finished方法

25:启动完毕

原文地址:https://www.cnblogs.com/413xiaol/p/9092674.html

时间: 2024-10-20 22:07:05

Spring Boot启动流程的相关文章

Spring Boot启动流程详解(一)

环境 本文基于Spring Boot版本1.3.3, 使用了spring-boot-starter-web. 配置完成后,编写了代码如下: @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } @RestController public class RootCont

Spring Boot启动流程代码断点分析

启动入口 跟进run方法 : 一个用来使用默认的配置从特定的源运行SpringApplication的静态帮助类. 这个类有两个重载方法,另一个用来传入多个源.通常,单个参数方法是数组方法的一个特例 创建一个新的SpringApplication实例.这个应用程序上下文会从特定的源加载Beans,这个实例会在调用run方法之前被定制化. Web应用程序类型的枚举:WebApplicationType,包含NONE(不是web应用),SERVLET(基于Servlet的web应用),REACTIV

Spring Boot启动原理解析

Spring Boot启动原理解析http://www.cnblogs.com/moonandstar08/p/6550758.html 前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏.所以这次博主就跟你们一起一步步揭开SpringBoot的神秘面纱,让它不在神秘. 正文 我们开发任何一个Spring Boot项目,都会用到如下的启动类 从上面代码可以看出,Annotation定义(@Sp

Spring Boot 启动(四) EnvironmentPostProcessor

Spring Boot 启动(四) EnvironmentPostProcessor Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring Boot 配置使用 Spring Boot 配置文件加载流程分析 - ConfigFileApplicationListener Spring Boot 配置文件加载 - EnvironmentPostProcessor 一.EnvironmentPostProcessor

spring boot启动原理步骤分析

spring boot最重要的三个文件:1.启动类 2.pom.xml 3.application.yml配置文件 一.启动类->main方法 1.spring boot通过fat jar方式用jdk命令java -jar jarname.jar启动的. fat jar就是包含被引用jar包的jar,因为会包含很多jar包,所以称为fat,肥胖. 2.spring  boot通过static void main方法启动,main方法是java程序总是最先运行的地方,这个是由jvm虚拟机决定的.任

Spring Boot启动过程(四):Spring Boot内嵌Tomcat启动

之前在Spring Boot启动过程(二)提到过createEmbeddedServletContainer创建了内嵌的Servlet容器,我用的是默认的Tomcat. private void createEmbeddedServletContainer() { EmbeddedServletContainer localContainer = this.embeddedServletContainer; ServletContext localServletContext = getServ

Spring Boot启动过程(三)

我已经很精简了,两篇(Spring Boot启动过程(一).pring Boot启动过程(二))依然没写完,接着来. refreshContext之后的方法是afterRefresh,这名字起的真...好.afterRefresh方法内只调用了callRunners一个方法,这个方法从上下文中获取了所有的ApplicationRunner和CommandLineRunner接口的实现类,并执行这些实现类的run方法.例如Spring Batch的JobLauncherCommandLineRun

Spring Boot启动过程及回调接口汇总

Spring Boot启动过程及回调接口汇总 链接: https://www.itcodemonkey.com/article/1431.html 来自:chanjarster (Daniel Qian) 注:本文基于spring-boot 1.4.1.RELEASE, spring 4.3.3.RELEASE撰写. 启动顺序 Spring boot的启动代码一般是这样的: 1 2 3 4 5 6 @SpringBootApplication public class SampleApplica

spring Boot启动报错Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotatedElementUtils.getAnnotationAttributes

spring boot 启动报错如下 org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure