Spring Boot的run方法的启动过程你真的知道吗
Spring Boot众所周知他不需要配置tomcat等web启动器就可以直接启动,那么是为什么呢?
那我们今天来分析一下SpringBoot启动的过程:
1.当我们使用SpringApplication的静态run方法时候,这个时候实例化了一个SpringApplication对象,调用的是有参构造方法。
在实例初始化之前,会先判断有没有Servlet,或者ConfigurableWebApplicationContext如果有的话得创建一个Web使用的SpringApplication。
在应用的classpath中查找并加载所有可用的应用语境初始化。
再查找所有的应用监听器并初始化。
2.实例初始化完毕之后,开始执行run方法,通过spring的工厂加载器查找并加载run方法监听器,调用starting()方法。
3.准备并配置SpringBoot的环境。
4.遍历执行所有的enviromentPrepared()方法,比如创建ApplicationContext。
5.判断SpringApplication的bannerMode,是CONSOLE则输出banner到System.out,是OFF则不打印,是LOG则输出到日志文件中。
6.判断是否设置applicationContextClass属性,如果有,则实例化该class。
7.将准备好的环境配置给ApplicationContext。
8.将beanNameGenerator,resourceLoader配置给当前的ApplicationContext。
9.创建好ApplicationContext之后,找到应用上下文初始化,遍历并加载。
10.遍历执行SpringApplicationRunListener的contextPrepared()方法。
11.通过@EnableAutoConfiguration这个注解获取所有配置,Ioc容器配置到当前已准备完毕的ApplicationContext。
12.遍历执行所有的上下文加载方法。
13.调用ApplicationContext的refresh()方法,完成Ioc容器可用的最后工序。
14.查找当前ApplicationContext中是否注册ApplicationRunner或者CommandLineRunner。
15.执行SpringApplicationRunListener的finished()方法!
(本文参考自高可用可伸缩微服务架构)