SpringBoot的启动原理?

embedded/2025/3/29 19:08:18/

大家好,我是锋哥。今天分享关于【SpringBoot的启动原理?】面试题。希望对大家有帮助;

SpringBoot的启动原理?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

Spring Boot的启动原理主要是通过 SpringApplication 类来启动一个Spring Boot应用。具体的启动流程可以分为以下几个主要步骤:

1. 初始化SpringApplication对象

  • Spring Boot应用的启动入口通常是 main 方法,通常是应用的启动类。
  • 启动类通过 SpringApplication.run(Application.class, args) 启动应用。SpringApplication 是Spring Boot的核心类,它负责整个应用的启动过程。
public static void main(String[] args) {SpringApplication.run(Application.class, args);
}

2. 创建SpringApplication实例

  • SpringApplication.run() 方法会创建一个 SpringApplication 实例,并调用它的 run() 方法来启动Spring应用上下文。
SpringApplication application = new SpringApplication(Application.class);

3. 准备和初始化环境

  • 在调用 run() 方法时,Spring Boot首先会创建一个 ApplicationContext,并加载所有的配置(如:application.properties 或 application.yml)。
  • 它会通过 ConfigurableEnvironment(也就是 Spring 的环境配置对象)来加载属性配置。此时,Spring Boot 会加载默认的环境配置,如嵌入式Tomcat配置、数据源配置等。

4. 设置命令行参数和配置

  • 在Spring Boot应用启动时,SpringApplication 会解析启动时传递的命令行参数,并在运行时将这些参数设置到Spring环境中。
  • 如果应用包含@SpringBootApplication注解,它会帮助我们自动配置很多常见的配置(如数据库、JPA、Web应用等)。

5. 创建Spring应用上下文(ApplicationContext)

  • Spring Boot会创建一个默认的 AnnotationConfigApplicationContext 或者 GenericWebApplicationContext,它会扫描并加载所有的配置和Bean(包括自动配置的类)。
  • 这会根据应用程序中的配置类(标注@Configuration或其他配置注解)来初始化 Spring 容器,并自动注入相应的Bean。

6. 自动配置机制

  • Spring Boot提供了 自动配置 的机制,借助于 @EnableAutoConfiguration 注解,Spring Boot根据项目的依赖和配置自动判断需要哪些默认配置。
  • 例如,如果项目中有 spring-boot-starter-web 依赖,Spring Boot就会自动配置Tomcat作为Web服务器。

7. 运行SpringApplication的生命周期监听器

  • 在应用启动过程中,Spring Boot会触发不同的事件,允许开发者监听这些事件来定制应用的行为。比如,ApplicationEnvironmentPreparedEventApplicationContextInitializedEventApplicationPreparedEvent等事件。

8. 启动嵌入式Web服务器

  • 如果是Web应用(比如RESTful API应用),Spring Boot会自动启动一个嵌入式Web服务器。默认情况下,Spring Boot使用Tomcat作为Web服务器,但也可以使用Jetty或Undertow等。
  • Spring Boot会根据应用的配置自动启动嵌入式Web服务器,并将应用部署在该服务器上。

9. 执行 CommandLineRunner 或 ApplicationRunner

  • 如果应用中有实现了 CommandLineRunner 或 ApplicationRunner 接口的Bean,Spring Boot会在应用启动完成后执行这些接口中的 run() 方法。
  • 这通常用于应用启动后进行一些自定义的初始化工作,比如加载数据、初始化缓存等。

10. 应用启动完毕

  • 一旦Spring Boot应用完全启动,SpringApplication.run()方法返回并且控制权回到调用者(通常是main方法)。此时,Spring Boot应用就可以接收HTTP请求或执行其他任务。

关键点总结:

  • SpringApplication:应用启动的核心类。
  • 自动配置:Spring Boot根据项目依赖自动配置常见的服务和组件。
  • ApplicationContext:Spring应用上下文,管理所有Bean和配置信息。
  • 嵌入式Web服务器:默认启动嵌入式Web服务器(如Tomcat),可以根据需要替换为其他服务器。
  • 生命周期监听:Spring Boot通过事件机制触发生命周期相关的操作。

通过这些步骤,Spring Boot应用能够高效、快速地启动并提供服务。


http://www.ppmy.cn/embedded/176134.html

相关文章

LeetCode 206 Reverse Linked List 反转链表 Java

举例1: 输入: [1,2,3,4,5], 输出: [5,4,3,2,1]. 举例2: 输入: [] 输出:[] 思路:方法有三种,分别是递归,栈,双指针,本篇使用栈&a…

AI 应用即智能体:探索从 Composer 到 Manus 下的范式演进

简单来说: AI 应用即智能体是将多个 AI 功能模块(智能体)整合起来,通过服务化的方式(如 API)提供给 AI,使其能够智能体能够相关交互一样, 利用其它 Agent 的能力来完成各种复杂的任务…

LS-NET-006-思科MDS 9148S 查看内存

LS-NET-006-思科MDS 9148S 查看内存 方法一:使用 show version​ 命令 该命令可显示设备的基本系统信息,包括内存总量。 登录交换机的CLI(通过控制台或SSH连接)。输入命令: show version 在输出中查找类似以下内容…

python前缀和详解+蓝桥杯练习题--巧克力

1.前缀和的基本概念 前缀和是一种重要的预处理技术,常用于快速计算数组中某个区间内元素的总和。对于一个给定的数组 arr,其前缀和数组 prefix_sum 的每个元素 prefix_sum[i] 表示原数组 arr 中从索引 0 到索引 i 的所有元素的总和。 设原数组为 arr …

C#里使用libxl来插入行或列

下面的例子来演示在一个已经存在行或列的位置来插入指定的行或列: 在这里使用函数InsertRow和InsertCol函数。 例子代码如下: private void button10_Click(object sender, EventArgs e) {var book new ExcelBook();if (book null)return;Random ran…

介绍HTTP协议基本结构与Linux中基本实现HTTPServer

介绍HTTP协议基本结构与基本实现HTTPServer HTTP协议 前面已经了解了协议的重要性并且已经定义了属于我们自己的协议,但是在网络中,已经有一些成熟的协议,最常用的就是HTTP协议 在互联网世界中,HTTP(HyperText Tran…

SOFABoot-10-聊一聊 sofatboot 的十个问题

前言 大家好,我是老马。 sofastack 其实出来很久了,第一次应该是在 2022 年左右开始关注,但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…

AI大模型训练教程

1. 引言 随着人工智能技术的快速发展,大模型(如GPT-3、BERT等)在自然语言处理、计算机视觉等领域取得了显著的成果。训练一个大模型需要大量的计算资源、数据和专业知识。本教程将带你了解如何从零开始训练一个AI大模型。 2. 准备工作 2.1 …