说说 Springboot 的启动流程?

Spring Boot 的启动流程是一个相对复杂但有序的过程,它涉及多个组件和步骤的协同工作。以下是 Spring Boot 启动流程的详细解析:

一、初始化阶段

  1. 启动入口

    • Spring Boot 应用的启动入口通常是一个包含 main 方法的类,该类上标注了 @SpringBootApplication 注解。@SpringBootApplication 是一个组合注解,它包含了 @Configuration@EnableAutoConfiguration@ComponentScan 等核心注解,用于开启自动配置和组件扫描。
  2. 创建应用上下文

    • main 方法中,通过调用 SpringApplication.run() 方法启动应用。该方法会创建一个 SpringApplication 实例,并调用其 run() 方法。
    • SpringApplication 实例在创建过程中会初始化应用上下文(ApplicationContext),这是 Spring 框架的核心容器,用于管理应用中的所有 Bean。

二、环境准备阶段

  1. 加载配置文件

    • Spring Boot 会自动加载 application.propertiesapplication.yml 等配置文件,这些文件包含了应用的配置信息,如数据库连接、服务器端口等。
    • 配置文件中的属性会被绑定到 Environment 对象中,供应用上下文使用。
  2. 确定应用类型

    • SpringApplication 会根据应用的依赖和配置,确定应用类型(如 Web 应用、非 Web 应用等),并据此初始化相应的应用上下文。

三、组件扫描与自动配置阶段

  1. 组件扫描

    • @ComponentScan 注解会触发组件扫描,Spring Boot 会扫描指定包及其子包下的所有类,查找带有 @Component@Service@Repository@Controller 等注解的类,并将它们注册为 Spring 容器中的 Bean。
  2. 自动配置

    • @EnableAutoConfiguration 注解会启用 Spring Boot 的自动配置机制。Spring Boot 会根据应用的依赖和配置,自动配置应用所需的 Bean 和组件。
    • 自动配置基于 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中的配置类列表,这些配置类会根据条件(如类路径中是否存在特定类、配置属性是否满足等)决定是否生效。

四、Bean 初始化与依赖注入阶段

  1. Bean 初始化

    • 在应用上下文初始化完成后,Spring Boot 会开始初始化所有的 Bean。这包括调用 Bean 的构造函数、设置属性等。
    • 对于带有 @PostConstruct 注解的方法,Spring Boot 会在 Bean 初始化完成后调用这些方法,执行一些初始化逻辑。
  2. 依赖注入

    • 在 Bean 初始化过程中,Spring Boot 会根据 Bean 的依赖关系,自动注入所需的依赖。这包括通过构造函数注入、Setter 方法注入或字段注入等方式。

五、应用启动完成阶段

  1. 启动监听器回调

    • 在应用启动完成后,Spring Boot 会调用所有注册的 ApplicationListeneronApplicationEvent 方法,通知它们应用已经启动完成。
    • 这可以用于执行一些启动完成后的逻辑,如发送启动完成通知、初始化缓存等。
  2. 启动 Web 服务器(如果是 Web 应用)

    • 对于 Web 应用,Spring Boot 会启动内置的 Web 服务器(如 Tomcat、Jetty 或 Undertow),并监听指定的端口,等待客户端请求。

总结

Spring Boot 的启动流程是一个从初始化到环境准备,再到组件扫描与自动配置,最后到 Bean 初始化与依赖注入,以及应用启动完成的完整过程。在这个过程中,Spring Boot 充分利用了 Spring 框架的核心特性,如依赖注入、面向切面编程等,同时提供了自动配置、组件扫描等便捷功能,大大简化了 Spring 应用的开发和部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88254.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页

如果php.ini已经加入了如下的内容还是报错 : upload_max_filesize 1024M post_max_size 1024M 那就是因为阿帕奇导致:

10、java语法糖

编译期处理:语法糖(即java编译器把。java的源码编译成。class字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是java编译器给我们的一个额外福利-给糖吃) 默认构造器:…

在Vscode中安装Sass并配置

在Vscode中安装Sass并配置 sass简介安装Sass插件配置sass插件编写sass使用Sass sass简介 Sass(Syntactically Awesome Style Sheets,英文官方文档 )是一种CSS预处理器,扩展了CSS的功能并提供了更高效的样式表编写方式。它兼容所有CSS版本&am…

深入解析 MySQL 并发控制:读写锁、锁粒度与高级优化

深入解析 MySQL 并发控制:读写锁、锁粒度与 InnoDB 实现细节 在高并发数据库应用中,确保数据一致性的同时最大化性能是永恒的挑战。MySQL 通过精巧的 锁机制(Locking) 和 多版本并发控制(MVCC) 来解决这个问题。本文聚焦于锁机制的核心:读写锁(共享/排他锁) 和 锁粒度…

【深度学习加速探秘】Winograd 卷积算法:让计算效率 “飞” 起来

一、为什么需要 Winograd 卷积算法?从 “卷积计算瓶颈” 说起 在深度学习领域,卷积神经网络(CNN)被广泛应用于图像识别、目标检测、语义分割等任务。然而,卷积操作作为 CNN 的核心计算单元,其计算量巨大&a…

前端项目脱离后端运行,备份后端API数据

问题描述: 开发过的项目老是打不开,因为离开公司后服务器用不了了。所以想着在公司开发的时候把数据都备份一下,供之后参考项目代码。 实现方法: 建一个Express服务,前端请求Express,Express代理目标服务器…

Windows下利用DevEcoStudio的交叉编译工具链编译assimp库给OpenHarmony使用

文章目录 准备编译使用 准备 安装DevEco Studio,并且安装好对应OpenHarmony版本的SDK 比如我这里安装了API 11 的sdk 对应的文件夹 然后下载ASSIMP的源文件,我这里下载的是5.4.3版本 【assimp 5.4.3】 解压放在一个文件夹里面,并在源码文…

批量大数据并发处理中的内存安全与高效调度设计(以Qt为例)

背景 在批量处理大型文件(如高分辨率图片、视频片段、科学数据块)时,开发者通常希望利用多核CPU并行计算以提升处理效率。然而,如果每个任务对象的数据量很大,直接批量并发处理极易导致系统内存被迅速耗尽,出现程序假死、崩溃,甚至系统级“死机”。 Qt自带的线程池(Q…

微信小程序课程设计美食点餐订餐系统

文章目录 1. 项目概述2. 项目思维导图3. 系统架构特点4. 核心模块实现代码1. 登录注册2. 首页模块实现4. 分类模块实现5. 购物车模块实现6. 订单模块实现 5. 注意事项6. 项目效果截图7. 关于作者其它项目视频教程介绍 1. 项目概述 在移动互联网时代,餐饮行业数字化…

Linux中使用grep查看日志

Linux中使用grep查看日志 文章目录 Linux中使用grep查看日志1、使用 grep 查找字符或字符串示例常用选项例子 2、显示前后上下文选项说明示例命令 结果示例 3、显示出现的次数使用示例选项说明示例其他方法总结 4、其他命令1. 基本用法2. 常用选项3. 正则表达式支持4. 其他实用…

DataWhale-零基础络网爬虫技术(二er数据的解析与提取)

课程链接先给各位 ↓↓↓ (点击即可食用.QAQ Datawhale-学用 AI,从此开始 一、数据的解析与提取 数据提取的几种方式: re解析bs4解析xpath解析 1.1正则表达式(Reuglar Experssion) RE是一种用于字符串匹配的规则描述方式。它…

Gin框架与Apifox

第一部分:技术栈概述 1. Go语言简介 Go(又称Golang)是Google开发的一门静态类型、编译型编程语言,具有以下特点: 高性能:编译为机器码,执行效率接近C/C 简洁语法:没有复杂的OOP概…

Docker 容器技术入门与环境部署

一、Docker 技术概述与核心概念解析 (一)Docker 技术本质与定位 Docker 是当前主流的操作系统级容器虚拟化技术,其核心价值在于通过轻量化隔离机制解决开发、测试与生产环境的一致性问题。与传统虚拟机(如 VMware)相…

π0源码(openpi)剖析——从π0模型架构的实现:如何基于PaLI-Gemma和扩散策略去噪生成动作,到基于C/S架构下的模型训练与部署

前言 ChatGPT出来后的两年多,也是我疯狂写博的两年多(年初deepseek更引爆了下),比如从创业起步时的15年到后来22年之间 每年2-6篇的,干到了23年30篇、24年65篇、25年前两月18篇,成了我在大模型和具身的原始技术积累 如今一转眼已…

Vui:轻量级语音对话模型整合包,让交互更自然

Vui:轻量级语音对话模型,让交互更自然 🗣️✨ Vui 是 Fluxions-AI 团队推出的一款开源轻量级语音对话模型,其核心架构基于 LLaMA。这款模型经过了长达 4 万小时的真实对话数据训练,能够逼真地模拟人类对话中的语气词、…

【STL】深入理解 string 的底层思想

一、STL的定义 STL是C标准库的一部分它不仅是一个可复用的组件库还是一个包含数据结构和算法的软件框架。 二、STL的历史和版本 原始版本: Alexander Stepanov、Meng Lee在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运…

深入剖析Linux epoll模型:从LT/ET模式到EPOLLONESHOT的实战指南

一、epoll:高性能I/O复用的核心引擎 epoll是Linux内核2.6引入的高效I/O多路复用机制,专为解决C10K问题而生。相比select/poll,epoll在连接数激增时性能优势显著: // 创建epoll实例 int epollfd epoll_create1(0);// 事件注册 s…

网络安全之某cms的漏洞分析

漏洞描述 该漏洞源于Appcenter.php存在限制,但攻击者仍然可以通过绕过这些限制并以某种方式编写代码,使得经过身份验证的攻击者可以利用该漏洞执行任意命令 漏洞分析 绕过编辑模板限制,从而实现RCE 这里可以修改模板文件,但是不…

Nginx-前端跨域解决方案!

1 Nginx 核心 Nginx 是一个开源的高性能 HTTP 和反向代理服务器,以轻量级、高并发处理能力和低资源消耗著称。除作为 Web 服务器外,还可充当邮件代理服务器和通用的 TCP/UDP 代理服务器,广泛应用于现代 Web 架构中。 在 Windows 系统中使用…

RedisVL 入门构建高效的 AI 向量搜索应用

一、前置条件 在开始之前,请确保: 已在 Python 环境中安装 redisvl。运行 Redis Stack 或 Redis Cloud 实例。 二、定义索引架构(IndexSchema) 索引架构(IndexSchema)用于定义 Redis 的索引配置和字段信…