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

java web学习笔记--后端进阶(二)SpringBoot原理

Java Web 学习笔记 —— 后端进阶二Spring Boot 原理深度解析2026 年视角Spring Boot 的“魔法”其实就是一套精心设计的约定 配置 自动装配 事件驱动 生命周期管理机制。到 2026 年Spring Boot 3.2.x / 3.3.x 已经非常成熟启动性能优化AOT、GraalVM Native 支持、虚拟线程集成、结构化日志等新特性已经融入核心但最核心的启动流程与自动配置原理变化不大。下面从**“为什么这么简单就能跑起来”**的角度拆解最核心的几条主线带源码关键路径。一、SpringBootApplication 到底包含了什么三剑客SpringBootApplicationpublicclassDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(DemoApplication.class,args);}}点开SpringBootApplicationTarget(ElementType.TYPE)Retention(RetentionPolicy.RUNTIME)DocumentedInheritedSpringBootConfiguration// 1. 标记这是一个配置类等价 ConfigurationEnableAutoConfiguration// 2. 开启自动配置最核心ComponentScan(// 3. 组件扫描默认当前包及其子包excludeFiltersFilter(typeFilterType.CUSTOM,classesTypeExcludeFilter.class),includeFiltersFilter(typeFilterType.CUSTOM,classesAutoConfigurationExcludeFilter.class))publicinterfaceSpringBootApplication{...}三剑客各自职责注解核心作用底层实现关键类SpringBootConfiguration声明这是一个 Spring 配置类—EnableAutoConfiguration开启自动配置最重要的魔法AutoConfigurationImportSelectorComponentScan扫描当前包及其子包下的 Component 等ClassPathBeanDefinitionScanner二、Spring Boot 启动流程全景SpringApplication.run() 核心步骤publicstaticConfigurableApplicationContextrun(Class?...primarySources,String[]args){returnnewSpringApplication(primarySources).run(args);}run() 方法核心流程简化版2026 年视角创建 SpringApplication 实例构造函数推断应用类型Servlet / Reactive / None设置 Application TypeServlet → AnnotationConfigServletWebServerApplicationContext加载所有 ApplicationContextInitializer初始化器加载所有 ApplicationListener监听器推断主类main 方法所在类run() 方法执行 12 大步骤最核心部分run() 方法内部主要做了以下事伪代码顺序 1. StopWatch 计时开始 2. 创建并启动 SpringApplicationRunListeners发布 ApplicationStartingEvent 3. 准备环境prepareEnvironment加载 application.properties/yaml、命令行参数、Profile 等 4. 创建并准备 ApplicationContextcreateApplicationContext prepareContext 5. 刷新上下文前准备prepareContext绑定环境、加载 banner、发布 ApplicationEnvironmentPreparedEvent 6. 刷新上下文refreshContext调用 Spring 经典的 refresh() 方法BeanFactoryPostProcessor、BeanPostProcessor、实例化单例等 7. 发布 ApplicationStartedEvent / ApplicationReadyEvent 8. 执行 RunnersApplicationRunner / CommandLineRunner 9. 异常处理 优雅关闭钩子 10. 计时结束 日志输出启动耗时关键节点时间线2026 年典型启动耗时占比参考环境准备~10–15%自动配置加载 条件评估~25–35%最耗时部分Bean 定义加载 实例化~30–40%内嵌容器启动Tomcat/Jetty/Undertow~10–20%Runners 执行~5%三、自动配置Auto-Configuration的核心原理最常考自动配置的本质一句话“根据类路径中存在的 jar 包按条件加载对应的 xxxAutoConfiguration 类”。核心链路EnableAutoConfiguration → AutoConfigurationImportSelectorEnableAutoConfiguration→Import(AutoConfigurationImportSelector.class)AutoConfigurationImportSelector 实现 DeferredImportSelector Group在processImports()阶段调用getAutoConfigurationEntry()从META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.importsSpring Boot 3.0 新格式或旧的spring.factories读取所有候选自动配置类条件过滤Conditional 家族ConditionalOnClassConditionalOnMissingBeanConditionalOnPropertyConditionalOnWebApplicationConditionalOnExpressionConditionalOnResource…2026 年变化点面试常问Spring Boot 3.0 优先使用META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports纯文本加载更快AOTAhead-of-Time编译时会提前评估所有 Conditional生成静态 Bean 定义GraalVM Native 关键启动性能优化延迟初始化Lazy、Bean 预加载、Class 数据共享CDS四、常见面试/源码追问链2025–2026 高频Spring Boot 启动类为什么可以不写 Configuration→ 因为 SpringBootApplication 包含了 SpringBootConfiguration自动配置类是怎么被加载的为什么加了 starter 就能自动生效→ spring.factories / .imports 文件 SpringFactoriesLoader / ImportSelectorsConditionalOnMissingBean 是什么时候生效的→ 在 AutoConfiguration 导入阶段ConfigurationClassPostProcessor为什么自定义的 Bean 能覆盖自动配置的 Bean→ 因为用户定义的 Bean 先加载ComponentScan 先扫描ConditionalOnMissingBean 看到已存在就不加载自动的Spring Boot 如何实现“jar 包直接运行”→ spring-boot-maven-plugin 打包成可执行 jar包含 org.springframework.boot.loader 内嵌容器如何自定义 Starter最常手写题写 xxxAutoConfiguration META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports写 xxxProperties ConfigurationProperties打包成 starter jar不带 main 方法Spring Boot 3 与 2.x 启动流程最大区别→ AOT 支持、GraalVM Native、虚拟线程默认支持、Jakarta EE 迁移、.imports 文件取代部分 factories五、总结一句话口诀背下来“Spring Boot Spring 约定优于配置 自动配置 内嵌容器 可执行 Jar 事件驱动 条件装配”核心魔法链SpringBootApplication → EnableAutoConfiguration → AutoConfigurationImportSelector → spring.factories / .imports → Conditional 条件过滤 → Bean 定义 → refresh() 刷新容器你现在对 Spring Boot 原理最想搞清楚的是哪一块是启动流程详细源码、自动配置条件评估细节、自定义 Starter 实战、AOT/GraalVM Native 变化还是 Spring Boot 3 与 2.x 的差异对比可以继续针对性深挖

相关文章:

java web学习笔记--后端进阶(二)SpringBoot原理

Java Web 学习笔记 —— 后端进阶(二):Spring Boot 原理深度解析(2026 年视角) Spring Boot 的“魔法”其实就是一套精心设计的约定 > 配置 自动装配 事件驱动 生命周期管理机制。 到 2026 年,Sprin…...

Realtek 8852CE网卡Linux驱动全攻略:从故障排查到性能优化

Realtek 8852CE网卡Linux驱动全攻略:从故障排查到性能优化 【免费下载链接】rtw89 Driver for Realtek 8852AE, an 802.11ax device 项目地址: https://gitcode.com/gh_mirrors/rt/rtw89 诊断硬件兼容性的3个步骤 当你在会议室突然断网时,是否怀…...

SEER‘S EYE预言家之眼效果对比:与传统规则引擎在推理游戏中的表现

SEERS EYE预言家之眼效果对比:与传统规则引擎在推理游戏中的表现 1. 引言 想象一下,你正在玩一局狼人杀。作为预言家,你每晚可以查验一名玩家的身份。你的对手,可能是严格按照“如果A发言有漏洞,则投票给A”这类规则…...

如何快速优化暗影精灵笔记本性能:开源硬件控制工具终极指南

如何快速优化暗影精灵笔记本性能:开源硬件控制工具终极指南 【免费下载链接】OmenSuperHub 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 对于暗影精灵笔记本用户来说,硬件性能优化一直是个头疼的问题。OmenSuperHub这款开源工具通…...

【01】什么是机器学习?理论基础与技术要点

一、定义与核心特征 机器学习作为人工智能的核心分支,其本质是通过设计高效算法,使计算机系统无需显式编程指令,即可从数据中自主挖掘内在规律与关联关系,并基于习得的模式完成预测、分类、决策等各类任务的技术体系。与传统编程…...

OpenClaw技能开发入门:为GLM-4.7-Flash扩展自定义文件转换器

OpenClaw技能开发入门:为GLM-4.7-Flash扩展自定义文件转换器 1. 为什么需要自定义技能 去年我在整理技术文档时,经常需要将PDF格式的论文和报告转换成Markdown格式。手动操作不仅耗时,还容易出错。当我发现OpenClaw可以通过技能扩展实现自动…...

rl-agents项目实战:如何自定义你的强化学习环境与智能体配置文件?

RL-Agents项目实战:深度定制强化学习环境与智能体配置指南 引言 当你第一次成功运行rl-agents示例代码时,那种兴奋感可能还记忆犹新。但很快,你会面临一个更实际的挑战:如何将这个框架适配到自己的研究项目中?与大多数…...

BEYOND REALITY Z-Image实际效果:眼镜/项链/耳环等配饰与皮肤自然接触渲染

BEYOND REALITY Z-Image实际效果:眼镜/项链/耳环等配饰与皮肤自然接触渲染 1. 项目概述 BEYOND REALITY Z-Image是一款基于先进AI技术的文生图创作引擎,专门针对高精度写实人像生成进行了深度优化。该系统结合了Z-Image-Turbo底座架构和BEYOND REALITY…...

NEURAL MASK 在嵌入式视觉系统中的轻量化部署实践

NEURAL MASK 在嵌入式视觉系统中的轻量化部署实践 最近在做一个工业质检的项目,客户要求摄像头端就能实时处理视频流,发现异常立刻报警,根本等不及把视频传到云端再分析。这让我想起了之前研究过的NEURAL MASK技术,它在图像修复和…...

如何通过Win11Debloat实现Windows系统深度优化:从性能提升到隐私保护的全流程指南

如何通过Win11Debloat实现Windows系统深度优化:从性能提升到隐私保护的全流程指南 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及…...

【Unity进阶】AudioSource 实战技巧与性能优化指南

1. AudioSource基础操作与实战技巧 AudioSource是Unity中最常用的音频组件之一,掌握它的基础操作是游戏开发的必备技能。在实际项目中,我发现很多开发者只是简单调用Play()和Stop(),其实AudioSource还有很多实用的功能值得挖掘。 1.1 精准控制…...

杭电网安复试编程Day24

1、十六进制转换题目描述&#xff1a;输入一个十进制的数&#xff0c;把它转成十六进制。 方法一&#xff1a;利用内置函数#include<iostream> using namespace std; int n; int main() {cin>>n;cout << hex << n << endl;return 0; }方法二&…...

微信小程序逆向实战:从源码提取到动态调试全解析

1. 微信小程序逆向工程入门指南 第一次接触微信小程序逆向时&#xff0c;我被那些加密的.wxapkg文件搞得一头雾水。经过多次实践后发现&#xff0c;逆向过程其实就像拆解一个俄罗斯套娃 - 需要层层剥离才能看到核心内容。对于开发者来说&#xff0c;掌握这套技能不仅能进行安全…...

玩过电源设计的都知道,Buck电路的双闭环控制就像炒菜放盐——调不好整锅都得翻车。今天咱们直接上干货,从数学建模到仿真验证,手把手把PI调节器的门道拆开了说

buck双闭环控制仿真降压电路PI调节器设计降压斩波电路建模和数学模型建模 建模方法有状态空间平均法&#xff0c;开关元件平均模型法&#xff0c;开关网络平均模型法提供双闭环调节器设计方案 从滤波器设计到pi调节器设计再到仿真。 从滤波器设计到建模&#xff0c;得到被控对象…...

IC封装选型与焊接实战指南:从DIP到BGA/WLCSP

1. 常见IC封装形式详解&#xff1a;从选型到焊接的工程实践在嵌入式硬件开发全流程中&#xff0c;IC封装绝非仅关乎“芯片如何装进电路板”的物理问题。它是连接芯片内部晶体管阵列与外部PCB互连网络的关键桥梁&#xff0c;直接影响信号完整性、热管理效率、制造良率、维修可行…...

售楼管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

摘要 随着房地产行业的快速发展&#xff0c;传统的售楼管理方式逐渐暴露出效率低下、信息不透明和数据管理混乱等问题。为了提高售楼管理的效率和精准度&#xff0c;信息化管理系统的开发成为行业发展的必然趋势。售楼管理系统通过数字化手段整合客户信息、房源数据和交易流程&…...

W5500硬件TCP/IP协议栈驱动开发详解

1. W5500以太网控制器驱动技术深度解析W5500是由WIZnet公司推出的硬件TCP/IP嵌入式以太网控制器&#xff0c;其核心价值在于将完整的TCP/IP协议栈&#xff08;包括MAC、PHY、IPv4、ICMP、ARP、UDP、TCP、PPPoE等&#xff09;固化于芯片内部&#xff0c;通过SPI接口与MCU通信&am…...

TBR架构为何必须全屏Resolve

从一个根本性的矛盾说起 TBR架构有一个天才的设计:把屏幕切成小块(Tile),每个Tile在片上内存里完成所有渲染操作。片上内存快、省电、带宽大。 但这个天才设计埋下了一个根本性的矛盾—— 片上内存一次只能看到一个Tile。但下一个RenderPass可能需要看到整个屏幕。 这个…...

KLayout源码探秘:从点击“打开”到GDSII文件加载,这中间到底发生了什么?

KLayout源码探秘&#xff1a;从点击“打开”到GDSII文件加载的完整事件链解析 当你在KLayout中点击"打开"按钮时&#xff0c;一个看似简单的操作背后隐藏着精密的工程艺术。作为EDA工具链中的瑞士军刀&#xff0c;KLayout处理GDSII文件的过程犹如精密仪器的内部齿轮咬…...

Delphi 进阶实战:异常捕获+多线程,让软件更稳定、更高效!

我们完成了 Delphi 软件的打包发布&#xff0c;从零基础入门到成品发布&#xff0c;已经能独立开发并发布实用软件了。但如果想让你的软件更专业、更稳定&#xff0c;避免“闪退”“卡死”&#xff0c;还需要掌握两个进阶技能——这也是企业开发中必用的核心能力&#xff1a;1.…...

一文读懂-yolo26如何预测识别图片|视频|摄像头|文件夹检测适用v8v11

yolo26图片视频摄像头文件夹批量检测步骤适用v8v11一、检测代码 可以在yolo项目代码的根目录&#xff0c;新建一个python文件&#xff0c;我这里叫做detect.py&#xff0c;代码的内容如下&#xff1a; from ultralytics import YOLO if __name__ __main__:model YOLO(r&quo…...

3分钟掌握WE Learn智能助手:让你的网课学习效率提升300%

3分钟掌握WE Learn智能助手&#xff1a;让你的网课学习效率提升300% 【免费下载链接】WELearnHelper 显示WE Learn随行课堂题目答案&#xff1b;支持班级测试&#xff1b;自动答题&#xff1b;刷时长&#xff1b;基于生成式AI(ChatGPT)的答案生成 项目地址: https://gitcode.…...

创建函数和调用函数

...

基于SpringAi 开发聊天机器人

事先说明&#xff1a;采用本地部署Ollama&#xff0c;用的模块是deepseek-r1:1.5b 一、创建spring boot基础工程 二、导入相关依赖 <properties><java.version>17</java.version><spring-ai.version>1.1.3</spring-ai.version></properties&…...

CLIP-GmP-ViT-L-14图文匹配测试工具效果深度分析:互联网内容安全实战

CLIP-GmP-ViT-L-14图文匹配测试工具效果深度分析&#xff1a;互联网内容安全实战 最近在评估一些用于内容审核的AI工具&#xff0c;其中一个叫CLIP-GmP-ViT-L-14的模型引起了我的注意。它主打的是“图文匹配”&#xff0c;简单说就是能理解图片和文字之间的关系。这听起来不就…...

SGP30气体传感器原理与RT-Thread嵌入式集成实战

1. SGP30气体传感器技术解析与嵌入式系统集成实践1.1 传感器核心特性与工程定位SGP30是Sensirion公司推出的单芯片多传感元件金属氧化物&#xff08;MOx&#xff09;气体传感器&#xff0c;其设计目标是在有限空间内实现高精度、低功耗的室内空气质量监测。该器件并非传统意义上…...

不只是跑波形:用ModelSim+Quartus做一次完整的FPGA功能验证(以边沿检测模块为例)

不只是跑波形&#xff1a;用ModelSimQuartus做一次完整的FPGA功能验证&#xff08;以边沿检测模块为例&#xff09; 当你在Quartus中点击"Start Simulation"按钮时&#xff0c;是否曾思考过&#xff1a;仿真究竟是为了看漂亮的波形图&#xff0c;还是为了验证设计的正…...

Ubuntu 22.04下ToDesk安装配置全攻略(附常见问题解决)

Ubuntu 22.04下ToDesk安装配置全攻略&#xff08;附常见问题解决&#xff09; 远程办公已经成为现代工作方式的重要组成部分&#xff0c;而ToDesk作为一款高效稳定的远程控制工具&#xff0c;在Linux用户中也越来越受欢迎。本文将详细介绍在Ubuntu 22.04系统上安装和配置ToDesk…...

PCB设计六条工程准则:从制造可行性到信号完整性

1. PCB设计的工程实践指南&#xff1a;从原理图到物理实现的关键决策在嵌入式硬件开发流程中&#xff0c;原理图设计完成往往被误认为项目已过半。然而&#xff0c;真正决定电路能否稳定工作、是否具备量产可行性、甚至影响最终产品可靠性的关键阶段&#xff0c;恰恰是PCB布局布…...

PDFtoPrinter:Windows环境下PDF打印自动化解决方案深度剖析

PDFtoPrinter&#xff1a;Windows环境下PDF打印自动化解决方案深度剖析 【免费下载链接】PDFtoPrinter .Net Wrapper over PDFtoPrinter util allows to print PDF files. 项目地址: https://gitcode.com/gh_mirrors/pd/PDFtoPrinter 价值定位&#xff1a;重新定义PDF打…...