首页
学习
活动
专区
圈层
工具
发布

Springboot详细启动过程

Spring Boot 启动过程详解

Spring Boot 是一个用于快速开发独立的、生产级别的基于 Spring 框架的应用的工具。它简化了基于 Spring 的应用开发,特别是微服务的开发。下面是 Spring Boot 应用的启动过程的详细解析。

1. main 方法入口

一切从main方法开始。Spring Boot 应用的入口点是包含main方法的类,该类通常使用@SpringBootApplication注解标记。

/**应用从main()方法启动,并通过SpringApplication.run()引导应用启动。其中main方法中的@SpringBootApplication注解是一个组合注解,包含了三个核心注解:@SpringBootConfiguration:相当于@Configuration,表示该类是Spring配置类。@EnableAutoConfiguration:启动自动配置功能。@ComponentScan:启用组件扫描,默认扫描当前包及其子包下的Spring组件(如@Service、@Controller、@Repository)等。**/@SpringBootApplicationpublic class Application {  public static void main(String[] args) {        SpringApplication.run(Application.class, args); }}

其中SpringApplication.run() 是启动 Spring Boot 应用的核心。它执行了以下关键步骤:

1) 创建SpringApplication对象

首先,它会创建一个新的SpringApplication实例。这个实例负责管理应用的启动。

2) 推断应用的类型

Spring Boot 会推断应用是普通的 Spring 应用还是 Web 应用(Servlet 或 Reactive 类型)。

3) 初始化ApplicationContext

根据应用的类型,Spring Boot 会选择创建一个合适的ApplicationContext实例(例如AnnotationConfigApplicationContext或AnnotationConfigServletWebServerApplicationContext)。

4) 准备环境

Spring Boot 会准备Environment,用于配置应用。这包括读取配置文件、系统属性、环境变量等。

5) 应用初始化器

应用初始化器ApplicationContextInitializer会被调用,它们可以在ApplicationContext被刷新之前对其进行进一步的设置或处理。

6) 执行监听器

各种事件监听器ApplicationListener会被触发,以响应不同的应用生命周期事件。

7) 加载源

SpringApplication会加载应用的主配置类(通常是使用@SpringBootApplication注解的类)。

8) 刷新ApplicationContext

ApplicationContext会被刷新,这将导致 Spring 容器加载所有的单例 beans。

9) 执行命令行运行器

如果有的话,CommandLineRunner和ApplicationRunnerbeans 会被执行。

10) 启动内嵌服务器

如果是 Web 应用,Spring Boot 会启动内嵌的服务器(比如 Tomcat、Jetty 或 Undertow)。

11) 应用准备完成

最后,ApplicationReadyEvent会被发布,表示应用已经准备好接受请求。

3. 应用运行

此时,Spring Boot 应用已经启动并且运行中。它会持续运行,直到被关闭或者遇到中断。

4. 应用关闭

当应用关闭时,ApplicationContext会被关闭,这会导致ContextClosedEvent事件的发布。所有的标准清理步骤,如调用DisposableBean的destroy方法和关闭日志系统,都会在这个阶段执行。

以上就是 Spring Boot 应用的启动过程的详细解析。这个过程涉及了许多 Spring 框架的核心概念,如依赖注入、事件发布、环境抽象等。通过这个过程,Spring Boot 使得启动和运行基于 Spring 的应用变得更加简单和快速。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O4oSgsbOCI-K8bLeOiW240CA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券