深度解析SpringBoot 2.1.5启动流程

版权申诉
5星 · 超过95%的资源 5 下载量 96 浏览量 更新于2024-09-11 收藏 1014KB PDF 举报
"这篇文章深入分析了SpringBoot 2.1.5版本的启动流程源码,从调用SpringApplication的run方法开始,逐步解析启动过程中涉及的关键步骤和配置。" 在Spring Boot应用中,启动一个微服务的核心在于调用`SpringApplication.run()`方法。这个方法是`SpringApplication`类中的静态辅助方法,它接受两个主要参数:`primarySource`(通常是我们定义的启动类)和`args`(应用程序参数)。`primarySource`参数是加载的主要源,可以是任何类型的类,因为这里使用了`Class`作为泛型。`args`参数则通常包含从`main`方法传递进来的命令行参数。 `SpringApplication.run()`方法的内部执行流程大致如下: 1. 创建计时监控:首先,它会创建一个`StopWatch`对象来跟踪应用启动所花费的时间,然后开始计时。 2. 初始化上下文和异常报告:接着,它会初始化`ConfigurableApplicationContext`上下文,以及一个用于收集启动过程中可能出现异常的列表。 3. 设置系统属性:然后,`SpringApplication`会配置系统属性`java.awt.headless`,默认设置为`true`,这会影响图形界面相关操作的行为。 4. 创建运行监听器:接下来,`SpringApplication`会创建所有`SpringApplicationRunListener`监听器,并发布应用启动的事件,这些监听器可以监听到应用的启动、失败等生命周期事件。 5. 初始化默认应用参数:应用的命令行参数会被封装到`ApplicationArguments`对象中,供后续使用。 6. 准备Spring环境:通过`prepareEnvironment()`方法,`SpringApplication`会准备`ConfigurableEnvironment`,这是一个包含应用运行环境的接口,包括属性源、 profiles等信息。在这个过程中,`runListeners.environmentPrepared()`方法会被调用,通知监听器环境已经准备就绪。 7. 配置忽略的Bean:`SpringApplication`还会根据配置信息决定哪些Bean应该被忽略,不参与容器的管理。 8. 创建ApplicationContext:然后,它将创建`ApplicationContext`实例,这通常是`AnnotationConfigApplicationContext`,因为它依赖于注解配置。 9. 注册Bean定义:应用的主类和其他配置类会被注册为Bean定义,这个过程会通过`registerAndRefresh()`方法完成。 10. 启动应用:最后,`ApplicationContext`被启动,所有Bean开始被初始化,同时监听器的`runListeners.started()`方法会被调用,表示应用已经启动。 11. 完成计时:启动完成后,`StopWatch`停止计时,`runListeners.finished()`方法被调用,应用启动的完整时间会被记录。 整个启动流程涉及到Spring Boot的自动配置、条件注解、监听器机制等多个核心特性,对于理解Spring Boot的工作原理以及优化启动性能有着重要的意义。通过对源码的深入研究,开发者可以更好地定制化自己的Spring Boot应用,实现更高效和精细的控制。