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启动流程的主要内容,如果未能解决你的问题,请参考以下文章