当前位置: 首页 > article >正文

SpringBoot的启动原理?

大家好,我是锋哥。今天分享关于【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应用能够高效、快速地启动并提供服务。

相关文章:

SpringBoot的启动原理?

大家好,我是锋哥。今天分享关于【SpringBoot的启动原理?】面试题。希望对大家有帮助; SpringBoot的启动原理? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot的启动原理主要是通过 SpringApplication 类来…...

从零开始搭建向量数据库:基于 Xinference 和 Milvus 的文本搜索实践

引言 在 AI 和大数据时代,向量数据库正成为处理非结构化数据(如文本、图像)的利器。最近,我尝试用 Xinference 和 Milvus 搭建一个简单的文本搜索系统,从读取本地文本文件到实现交互式查询和高亮显示匹配结果&#xf…...

音视频系列——Websockets接口封装为Http接口

模型服务示例:实时语音转文本服务 本示例展示一个支持双协议(WebSocket流式接口HTTP同步接口)的语音转文本模型服务,并提供将WebSocket接口封装为HTTP接口的代码实现。 一、服务架构设计 #mermaid-svg-nw0dMZ4uKfS4vGZR {font-fa…...

scrapy入门(深入)

Scrapy框架简介 Scrapy是:由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据,只需要实现少量的代码,就能够快速的抓取。 新建项目 (scrapy startproject xxx):新建一个新的…...

docker模拟Dos_SYN Flood拒绝服务攻击 (Ubuntu20.04)

目录 ✅ 一、实验环境准备(3 个终端) 👉 所以最终推荐做法: 2️⃣ 配置 seed-attacker 为攻击者,开启 telnet 服务: 3️⃣ 配置 victim-10.9.0.5 为受害者服务器,开启 telnet 客户端并监听&…...

使用 Ansys Fluent 评估金属管道腐蚀

金属管道的维护和完整性在石油和天然气、石化和供水等各个行业中都至关重要。腐蚀对这些管道构成了重大威胁,可能导致泄漏、结构故障和环境危害。Ansys Fluent 提供了一个强大的平台来建模和分析金属管道腐蚀。 腐蚀是一种自然过程,金属材料会因与环境发…...

firefly经典蓝牙和QProcess、QFileSystemWatcher记录

QProcess 默认不会启动一个 shell 来解析命令,而是直接调用操作系统的系统调用来启动外部程序。也就是通过fork一个子线程或者exec一个子进程来执行命令。 QProcess的参数模式 QProcess 需要明确指定命令的可执行文件路径或参数列表。 如果命令是一个可执行文件的路径…...

基于PySide6的CATIA自动化工具开发实战——空几何体批量清理系统

一、功能概述 本工具通过PySide6构建用户界面,结合PyCATIA库实现CATIA V5的自动化操作,提供两大核心功能: ​空几何体清理:智能识别并删除零件文档中的无内容几何体(Bodies)​空几何图形集清理&#xff1…...

Blender配置渲染设置并输出动画

在Blender中,渲染设置和渲染动画的选项位于不同的面板中。以下是具体步骤: 渲染设置 渲染设置用于配置输出格式、分辨率、帧率等参数。 打开右侧的 属性面板(按 N 键可切换显示)。 点击 “输出属性” 选项卡(图标是…...

Spring 声明式事务应该怎么学?

1、引言 Spring 的声明式事务极大地方便了日常的事务相关代码编写,它的设计如此巧妙,以至于在使用中几乎感觉不到它的存在,只需要优雅地加一个 Transactional 注解,一切就都顺理成章地完成了! 毫不夸张地讲&#xff…...

C++11 引入了的新特性与实例说明

C11 引入了许多重要的新特性&#xff0c;以下是一些关键特性及其对应的示例代码&#xff0c;用于体现这些特性的用法和优势。 1. 自动类型推导 (auto) auto 关键字允许编译器自动推导变量的类型&#xff0c;简化代码书写。 #include <iostream> #include <vector>…...

二手Mac验机过程

1.1 外观检查 螺丝是否拧过螺丝 1.2 关于本机中 序列号&#xff0c;盒子序列号&#xff0c;机器背部 核对参数 https://checkcoverage.apple.com/coverage 1.3 检查apple ID与查找 1 登出 iCloud、iTunes、FaceTime、iMessage 在 Mac 上打開「訊息」應用程式&#xff0c;從上方…...

从 0 到 1 掌握鸿蒙 AudioRenderer 音频渲染:我的自学笔记与踩坑实录(API 14)

最近我在研究 HarmonyOS 音频开发。在音视频领域&#xff0c;鸿蒙的 AudioKit 框架提供了 AVPlayer 和 AudioRenderer 两种方案。AVPlayer 适合快速实现播放功能&#xff0c;而 AudioRenderer 允许更底层的音频处理&#xff0c;适合定制化需求。本文将以一个开发者的自学视角&a…...

Android 13深度定制:SystemUI状态栏时间居中显示终极实战指南

一、架构设计与技术解析 1. SystemUI状态栏核心布局机制 层级结构 mermaid 复制 graph TDPhoneStatusBarView --> StatusBarContents[status_bar_contents]StatusBarContents --> LeftLayout[status_bar_left_side]StatusBarContents --> ClockLayout[Clock控件]Left…...

支持多系统多协议且可提速的下载工具

在网络下载需求日益多样的当下&#xff0c;一款好用的下载器能极大提升效率。今天就给大家介绍 AB Download Manager&#xff0c;它免费又开源&#xff0c;能适配 Windows 和 Linux 系统&#xff0c;带来超便捷的下载体验。 AB Download Manager 采用先进的多线程技术&#xf…...

【leetcode hot 100 22】括号生成

解法一&#xff1a;&#xff08;回溯法&#xff09;用两个整数记录左右括号数&#xff0c;以在回溯过程中保证先生成左括号&#xff0c;且左右括号数不能大于n。 class Solution {public List<String> generateParenthesis(int n) {List<String> result new Arra…...

如何在 HTML 中创建一个有序列表和无序列表,它们的语义有何不同?

大白话如何在 HTML 中创建一个有序列表和无序列表&#xff0c;它们的语义有何不同&#xff1f; 1. HTML 中有序列表和无序列表的基本概念 在 HTML 里&#xff0c;列表是一种用来组织信息的方式。有序列表就是带有编号的列表&#xff0c;它可以让内容按照一定的顺序呈现&#…...

【武汉·4月11日】Parasoft联合光庭信息研讨会|邀您共探AI赋能新机遇

Parasoft联合光庭信息Workshop邀您共探AI赋能新机遇 AI浪潮已至&#xff0c;你准备好了吗&#xff1f; 在智能网联汽车飞速发展的今天&#xff0c;AI技术正以前所未有的速度重塑行业生态。如何把握AI机遇&#xff0c;赋能企业创新&#xff1f; 4月11日&#xff0c;自动化软件…...

PHP PSR(PHP Standards Recommendations)介绍

PHP PSR&#xff08;PHP Standards Recommendations&#xff09;是 PHP 社区制定的一系列标准化规范&#xff0c;旨在统一 PHP 代码的编写方式、接口设计和开发实践&#xff0c;以提高代码的可读性、可维护性和互操作性。以下是核心 PSR 标准的解读和具体使用方法&#xff1a; …...

闻所闻尽:穿透声音的寂静,照见生命的本真

在《楞严经》的梵音缭绕中&#xff0c;"闻所闻尽"四个字如晨钟暮鼓&#xff0c;叩击着每个修行者的心门。这个源自观世音菩萨耳根圆通法门的核心概念&#xff0c;既是佛门修行的次第指引&#xff0c;更蕴含着东方哲学对生命本质的终极叩问。当我们穿越时空的帷幕&…...

F28335进入非法中断ILLEGAL_ISR定位

在非法中断函数中&#xff0c;再调用一个函数接口&#xff0c;比如save_illegal_error()&#xff0c;然后在save_illegal_error中实现如下代码&#xff1a; g_illegal_isr_sp 0;(这个是全局变量&#xff0c;需要先定义 &#xff09; asm( “ MOVW ACC, SP\n” " MOVL …...

PreparedStatement 和 Statement 从 功能、性能、安全性、适用场景 等维度详细对比分析

以下是 PreparedStatement 和 Statement 的对比分析&#xff0c;从 功能、性能、安全性、适用场景 等维度详细说明&#xff1a; 1. 核心区别 特性PreparedStatementStatement定义预编译的 SQL 语句&#xff0c;支持参数化查询执行静态 SQL 语句&#xff0c;不支持参数占位符安…...

VLAN综合实验报告

一、实验拓扑 网络拓扑结构包括三台交换机&#xff08;LSW1、LSW2、LSW3&#xff09;、一台路由器&#xff08;AR1&#xff09;以及六台PC&#xff08;PC1-PC6&#xff09;。交换机之间通过Trunk链路相连&#xff0c;交换机与PC、路由器通过Access或Hybrid链路连接。 二、实验…...

使用 Docker 部署 mysql 应用

使用 Docker 部署 环境搭建 Docker 安装文档 创建容器 在系统任意位置创建一个文件夹&#xff08;可选&#xff09; mkdir -p /opt/docker/mysql && cd /opt/docker/mysqlmkdir ./{conf,data,logs}搜索 & 拉取镜像 docker search mysql docker pull mysql:5.6启…...

美团Leaf分布式ID实战:深入解析雪花算法原理与应用

&#x1f4d6; 前言 在分布式系统中&#xff0c;全局唯一ID生成是保证数据一致性的核心技术之一。传统方案&#xff08;如数据库自增ID、UUID&#xff09;存在性能瓶颈或无序性问题&#xff0c;而美团开源的Leaf框架提供了高可用、高性能的分布式ID解决方案。本文重点解析Leaf…...

Midjourney使用教程—2.作品修改

当您已生成第一张Midjourney图像的时候&#xff0c;接下来该做什么&#xff1f;了解我们用于修改图像的工具&#xff01;使用 Midjourney 制作图像后&#xff0c;您的创意之旅就不会止步于此。您可以使用各种工具来修改和增强图像。 一、放大操作 Midjourney每次会根据提示词…...

【人工智能】LM Studio 的 GPU 加速:释放大模型推理潜能的极致优化

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大语言模型(LLM)的广泛应用,其推理效率成为限制性能的关键瓶颈。LM Studio 作为一个轻量级机器学习框架,通过 GPU 加速显著提升了大…...

S32K144入门笔记(十七):PDB的API函数解读

文章目录 1. SDK中的函数2. API函数的释义 1. SDK中的函数 在SDK中并没有转为PDB设置专门的PAL驱动&#xff0c;在基本的DRIVER库中一共有21个API函数&#xff0c;本文将解读这些函数的功能。 2. API函数的释义 void PDB_DRV_Init(const uint32_t instance,const pdb_timer_…...

3.5 平滑滤波

请注意:笔记内容片面粗浅&#xff0c;请读者批判着阅读&#xff01; 一、引言 平滑空间滤波是数字图像处理中用于降低噪声和模糊细节的核心技术&#xff0c;常用于图像预处理或特定场景下的视觉效果优化。其核心思想是通过邻域像素的加权平均或统计操作&#xff0c;抑制高频噪…...

自动化测试框架pytest+requests+allure

Pytest requests Allure 这个框架基于python的的 Pytest 进行测试执行&#xff0c;并结合 Allure插件 生成测试报告的测试框架。采用 关键字驱动 方式&#xff0c;使测试用例更加清晰、模块化&#xff0c;同时支持 YAML 文件来管理测试用例&#xff0c;方便维护和扩展。 测试…...