Spring Boot Web启动流程

Posted 清箫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot Web启动流程相关的知识,希望对你有一定的参考价值。

1.        配置Beans源。

2.        推测是否是Web环境(只有环境中同时有Servlet和ConfigurableWebApplicationContext才能算是Web环境)。

3.        寻找ApplicationContextInitializer接口的实现类,并生成实例,然后按@Order排序。

4.        寻找ApplicationListener接口的实现类,并生成实例,然后按@Order排序。

5.        推测main方法所在的主类。

6.        寻找SpringApplicationRunListener接口的实现,并生成实例。要求SpringApplicationRunListener接口的实现必须有一个构造函数按顺序接收SpringApplication和String[]参数。然后执行SpringApplicationRunListener的starting()方法。

7.        注册CommandLinePropertySource,使命令行输入参数变成ApplicationArguments。

8.        利用SpringApplicationRunListeners和ApplicationArguments配置ConfigurableEnvironment(Servlet环境还是标准环境),再调用SpringApplicationRunListeners的environmentPrepared方法。

9.        执行SpringApplicationBannerPrint,输出Spring的Logo。

10.    创建ApplicationContext(可以根据环境自动配置,也可以自己配置),Web默认使用AnnotationConfigEmbeddedWebApplicationContext,其他使用AnnotationConfigApplicationContext。然后执行ApplicationContext.setEnvironment方法。

11.    注入beanNameGenerator,并填充ApplicationContext的ResourceLoader和ClassLoader。

12.    执行所有ApplicationContextInitializer实例的initialize方法。

13.    输出当前context中环境的ActiveProfile。

14.    注入springApplicationArguments(来源是第7步的ApplicationArguments。)和springBootBanner(第9步的SpringApplicationBannerPrint实例)。

15.    调用SpringApplicationRunListener的contextPrepared()方法。

16.    注入springApplicationArguments和springBootBanner单例对象。

17.    加载所有source中指定的单例Beans,并刷新ApplicationContext。ApplicationContext在刷新完成之后,调用finishRefresh()方法,启动内置Tomcat服务器。

18.    注册Servlet和Filter的映射关系。

19.    根据Controller上的@RequestMapping调用RequestMappingHandlerAdapter注册映射Handler和URL的映射关系;其他调用SimpleUrlHandlerMapping映射URL和资源的映射关系。

20.    默认8080端口监听请求。

21.    触发所有的ApplicationRunner和CommandLineRunner Beans。

22.    执行所有SpringApplicationRunListener的finished()方法。

以上是关于Spring Boot Web启动流程的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot启动流程详解

Spring Boot启动流程详解

Spring Boot启动流程

Spring Boot启动流程

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

SpringBoot - Spring Boot 应用剖析