Spring / Spring Boot 核心原理¶
Spring 是什么?¶
Spring 是 Java 生态中最主流的企业级应用开发框架,由 Rod Johnson 于 2003 年创建,核心思想是通过 IoC(控制反转) 和 AOP(面向切面编程) 解耦应用组件,让开发者专注于业务逻辑而非基础设施。
一句话:Spring 是"Java 企业开发的基础设施",就像盖楼的钢筋框架,业务代码是砖块,Spring 把它们组装在一起。
发展历程¶
timeline
title Spring 发展历程
2003 : Spring 1.0
: Rod Johnson 发布
: 解决 EJB 过重问题
: IoC 容器 + AOP
2006 : Spring 2.0
: XML 配置简化
: AspectJ 支持
2009 : Spring 3.0
: Java 5+ 注解驱动
: @Configuration
: REST 支持
2013 : Spring 4.0
: Java 8 支持
: WebSocket
: Spring Boot 1.0 发布
2017 : Spring 5.0
: 响应式编程 WebFlux
: Kotlin 支持
: Spring Boot 2.0
2022 : Spring 6.0
: 要求 Java 17+
: GraalVM 原生镜像
: Spring Boot 3.0
2024 : Spring Boot 3.3+
: 虚拟线程支持
: AOT 编译优化 📌 当前主流:企业新项目普遍使用 Spring Boot 3.x + Java 17/21;存量项目多为 Spring Boot 2.x + Java 8/11。
Spring 框架版图¶
flowchart TB
subgraph 微服务 / 云原生层
SCloud["Spring Cloud<br>Eureka · Gateway · Feign · Sentinel · Config"]
SCloudAlibaba["Spring Cloud Alibaba<br>Nacos · Sentinel · Seata · RocketMQ"]
end
subgraph 应用开发层
SBoot["Spring Boot<br>自动配置 · 起步依赖 · 内嵌容器 · Actuator"]
SSecurity["Spring Security<br>认证 · 授权 · OAuth2 · JWT"]
end
subgraph 数据访问层
SData["Spring Data<br>JPA · Redis · MongoDB · Elasticsearch"]
STx["Spring Transaction<br>声明式事务 · 编程式事务"]
end
subgraph Web 层
SMVC["Spring MVC<br>DispatcherServlet · REST · 文件上传"]
SWebFlux["Spring WebFlux<br>响应式 · Reactor · 非阻塞 IO"]
end
subgraph 核心基础层
SCore["Spring Core<br>IoC 容器 · DI · Bean 生命周期"]
SAOP["Spring AOP<br>动态代理 · 切面 · 切点"]
end
SCloud & SCloudAlibaba --> SBoot
SBoot --> SSecurity
SBoot --> SData & STx
SBoot --> SMVC & SWebFlux
SSecurity & SData & SMVC & SWebFlux --> SCore & SAOP 知识地图¶
mindmap
root((Spring 核心))
IoC 与 DI
控制反转思想
构造器注入
BeanFactory vs ApplicationContext
Bean 生命周期
实例化 → 注入 → Aware → BPP → 初始化 → 销毁
三级缓存解决循环依赖
AOP 面向切面
JDK 动态代理 / CGLIB 代理
切点表达式
同类调用失效
Spring MVC
DispatcherServlet
HandlerMapping / HandlerAdapter
Spring Boot
自动配置原理
条件注解
起步依赖
事务管理
传播行为
隔离级别
事务失效场景
Spring Security
过滤器链
JWT 认证
Spring Cloud
Eureka / Gateway / Feign / Sentinel
扩展点
BeanPostProcessor
BeanFactoryPostProcessor
ApplicationListener 知识点导航¶
| # | 知识点 | 核心一句话 | 详细文档 |
|---|---|---|---|
| 1 | IoC 与 DI | IoC 是"容器管对象",DI 是"容器送依赖",推荐构造器注入 | IoC与DI |
| 2 | Bean 生命周期与循环依赖 | 实例化→注入→Aware→BPP前→初始化→BPP后→使用→销毁;三级缓存解决循环依赖 | Bean生命周期与循环依赖 |
| 3 | 容器启动流程 | refresh() 12 步:BeanDefinition 加载→BPP 注册→单例实例化→事件发布 | Spring容器启动流程深度解析 |
| 4 | Spring 扩展点 | BPP 干预初始化,BFPP 修改 Bean 定义,ApplicationListener 监听事件 | Spring扩展点详解 |
| 5 | AOP 面向切面 | 基于代理拦截,this 调用绕过代理,Spring Boot 2.x 后默认 CGLIB | AOP面向切面编程 |
| 6 | 事务管理 | 事务是 AOP 特例,this 调用不生效,异常要抛出,注意传播行为 | Spring事务管理 |
| 7 | 自动配置原理 | @EnableAutoConfiguration 读列表,条件注解按需过滤,允许用户覆盖 | SpringBoot自动配置原理 |
| 8 | 常用注解全解 | @Conditional、@ConfigurationProperties、@Profile、@Import 等高频注解 | Spring常用注解全解 |
| 8a | 配置加载与属性绑定 | 17 层 PropertySource 优先级,@Value 走占位符 / @ConfigurationProperties 走 Binder,@RefreshScope 动态刷新 | Spring配置加载与属性绑定 |
| 9 | Spring MVC | DispatcherServlet 总调度,HandlerMapping 找处理器,HandlerAdapter 适配调用 | SpringMVC请求处理流程 |
| 10 | Feign 声明式 HTTP | 声明式 HTTP 客户端,注解定义接口即可调用远程服务 | Feign声明式HTTP客户端 |
| 11 | gRPC 详解 | 高性能 RPC 框架,基于 Protobuf 序列化 + HTTP/2 传输 | gRPC详解 |
| 12 | Spring Security | 过滤器链拦截请求,JWT 无状态认证,方法级权限控制 | Spring-Security认证与授权 |
| 13 | Spring Cloud | Eureka 服务发现 + Gateway 网关 + Feign 调用 + Sentinel 熔断 | Spring-Cloud核心组件 |
| 14 | 微服务架构实践 | 服务拆分、通信、治理、部署的完整微服务落地方案 | 微服务架构深度实践 |
| 15 | 安全架构深度 | OAuth2、RBAC、ABAC、安全漏洞防护等企业级安全方案 | Spring安全架构深度解析 |
| 16 | 数据访问高级 | JPA 优化、多数据源、读写分离、MyBatis 高级用法 | Spring数据访问高级技巧 |
| 17 | 响应式编程 | WebFlux + Reactor,非阻塞 IO,适合高并发低延迟场景 | Spring响应式编程深度解析 |
| 18 | 消息驱动架构 | Spring Kafka/RabbitMQ 集成,事件驱动、CQRS、Saga 模式 | Spring消息驱动架构深度解析 |
| 19 | 配置中心与动态刷新 | Nacos / Apollo / Config + K8s ConfigMap 工程落地,@RefreshScope 踩坑与选型 | 配置中心与动态刷新 |
| 19 | 性能优化 | 监控→内存→启动→并发→数据库→缓存→网络,全方位优化指南 | 监控与内存优化 |
| 20 | Spring 6 / Boot 3 | Java 17+、Jakarta EE、GraalVM Native Image、虚拟线程、AOT 编译 | Spring6-Boot3新特性深度解析 |
| 21 | 源码阅读技巧 | 从入口到核心,掌握 Spring 源码阅读与调试的方法论 | Spring源码阅读与调试技巧 |
| 22 | 生产环境运维 | Actuator 监控、日志管理、优雅停机、灰度发布等运维实践 | 生产环境Spring应用运维 |
| 23 | 测试框架 | 单元测试、集成测试、MockMvc、TestContainers 等测试最佳实践 | Spring测试框架深度使用 |
| 24 | 实战应用题 | 事务排查、长事务优化、AOP失效、Bean泄漏等 12 道实战题 | Spring实战应用题 |
高频问题索引¶
| 问题 | 详见 |
|---|---|
| IoC 和 DI 的区别?BeanFactory vs ApplicationContext? | IoC与DI |
| Bean 单例线程安全吗?循环依赖如何解决? | Bean生命周期与循环依赖 |
| AOP 不生效怎么排查?为什么默认用 CGLIB? | AOP面向切面编程 |
| 事务不回滚的原因?REQUIRED vs REQUIRES_NEW? | Spring事务管理 |
| 自动配置原理?如何自定义 Starter? | SpringBoot自动配置原理 |
配置优先级?@Value vs @ConfigurationProperties 底层差别?@RefreshScope 怎么刷? | Spring配置加载与属性绑定 |
Nacos / Apollo / Config 选哪个?@RefreshScope 不生效怎么排查?密钥管理怎么做? | 配置中心与动态刷新 |
| 认证和授权的区别?JWT vs Session? | Spring-Security认证与授权 |
| Eureka 自我保护是什么?服务雪崩如何防止? | Spring-Cloud核心组件 |
| 线上 OOM / Bean 泄漏怎么排查? | Spring实战应用题 |