Spring 知识图谱
- 主题域:java
- 关键词:Spring、Spring Boot、Spring Cloud、IoC、AOP、自动装配、微服务、Java 框架
- 状态:草稿
一、一句话结论
Spring 体系分七层看:核心容器(IoC)→ AOP → Spring MVC → 数据访问与事务 → Spring Boot → Spring Cloud → 测试与可观测;一切「魔法」的底层只有两样东西——Bean 容器加动态代理。
二、原理与来由(分层依据)
Spring 解决的是「对象创建与组装」和「横切逻辑织入」两件事:IoC 容器接管对象的实例化与依赖注入(控制反转),AOP 用动态代理把事务、日志等横切逻辑织进 Bean。往上,MVC 与数据访问是对两件基础能力的 Web 化与持久化封装;Spring Boot 用「约定 + 自动装配」消除这两层的配置成本;Spring Cloud 在 Boot 之上补齐微服务治理;测试与可观测贯穿全程。排查 Spring 问题的顺序即分层的倒序:先看现象在哪一层,再下钻到 Bean 生命周期或代理机制。
三、细节与用法
① 核心容器(IoC)
| 主题 |
一句话要点 |
检索关键词 |
| Bean 生命周期 |
实例化 → 属性注入 → Aware 回调 → BeanPostProcessor 前置 → 初始化(@PostConstruct / afterPropertiesSet)→ 后置 → 就绪 → 销毁;扩展点都挂在这条链上 |
Bean 生命周期、BeanPostProcessor |
| 循环依赖 |
三级缓存(singletonObjects / earlySingletonObjects / singletonFactories)解决 setter 注入的环;构造器注入与 prototype 的环直接报错 |
循环依赖、三级缓存 |
| 作用域与注入方式 |
singleton(默认)/ prototype / request / session;注入推荐构造器注入(不可变、可测、能暴露环) |
作用域、构造器注入 |
| 条件装配 |
@Conditional 系(@ConditionalOnClass / @ConditionalOnMissingBean 等)是自动装配的开关机制 |
Conditional、Profile |
② AOP 与代理
| 主题 |
一句话要点 |
检索关键词 |
| 两条代理路线 |
目标有接口默认 JDK 动态代理(Boot 2+ 默认 CGLIB);CGLIB 子类代理不能代理 final 类 / 方法 |
JDK 代理、CGLIB |
| 织入时机 |
Bean 初始化后由 AnnotationAwareAspectJAutoProxyCreator(一个 BeanPostProcessor)创建代理对象,容器里拿到的是代理 |
AOP 原理、切面 |
| 代理失效清单 |
自调用(this.method())、非 public 方法、final / static 方法、catch 吞异常——同类问题也是 @Transactional 失效的主因 |
自调用、代理失效 |
| 事务 |
@Transactional 的传播行为(REQUIRED 默认 / REQUIRES_NEW / NESTED)与隔离级别;失效场景与代理失效清单一致 |
事务、传播行为、 rollbackFor |
③ Spring MVC
| 主题 |
一句话要点 |
检索关键词 |
| 请求主线 |
DispatcherServlet → HandlerMapping → HandlerAdapter → Controller → ViewResolver / @ResponseBody(HttpMessageConverter) |
DispatcherServlet、MVC 流程 |
| 拦截层次 |
Filter(Servlet 规范,进出各一次)→ Interceptor(preHandle / postHandle / afterCompletion)→ AOP;执行顺序 Filter 最外 |
Filter、Interceptor |
| 参数与返回 |
@RequestParam / @PathVariable / @RequestBody 的绑定规则;统一返回体与全局异常处理(@ControllerAdvice + @ExceptionHandler) |
参数绑定、全局异常 |
| RESTful 与跨域 |
资源化 URL + HTTP 方法语义;CORS 用 @CrossOrigin 或全局 CorsRegistry 配置 |
RESTful、CORS |
④ 数据访问
| 主题 |
一句话要点 |
检索关键词 |
| 事务抽象 |
PlatformTransactionManager 统一编程式事务;@Transactional 声明式基于 AOP;数据源连接的获取与释放由事务管理器接管 |
事务管理器、DataSource |
| MyBatis 集成 |
SqlSessionFactoryBean + @MapperScan;动态 SQL 是它相对 JPA 的核心优势 |
MyBatis、Mapper |
| JPA / Hibernate |
面向对象映射 + EntityManager;N+1 查询用 fetch join 或 @EntityGraph 解 |
JPA、N+1 |
| 连接池 |
HikariCP 是 Boot 默认;核心参数 maximumPoolSize、connectionTimeout |
HikariCP、连接池调优 |
⑤ Spring Boot
| 主题 |
一句话要点 |
检索关键词 |
| 自动装配 |
@SpringBootApplication → @EnableAutoConfiguration → 读 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(2.7 前是 spring.factories)按条件装配 |
自动装配、AutoConfiguration |
| 配置体系 |
application.yml 多 profile(--- + spring.config.activate.on-profile);外部配置优先级:命令行 > 环境变量 > 配置文件 |
配置优先级、profile |
| Starter 机制 |
Starter = 依赖聚合 + 自动装配入口,引即用;自定义 Starter 是两者的组合实践 |
Starter |
| 内嵌容器与 Actuator |
内嵌 Tomcat / Jetty / Undertow,jar 直接跑;Actuator 暴露 health / metrics(生产收敛暴露面) |
Actuator、健康检查 |
⑥ Spring Cloud(微服务治理)
| 主题 |
一句话要点 |
检索关键词 |
| 注册发现 |
Nacos(国内主流,注册 + 配置一体)/ Eureka(2.x 停维护);客户端缓存 + 心跳续约 |
Nacos、服务发现 |
| 配置中心 |
Nacos Config / Apollo;配置变更推送到 @RefreshScope Bean |
配置中心、RefreshScope |
| 网关 |
Spring Cloud Gateway:Route + Predicate + Filter 三件套,承接路由、鉴权、限流入口 |
Gateway、路由谓词 |
| 熔断限流 |
Sentinel(国内主流,控制台规则热更新)/ Resilience4j;模式是失败降级 + 窗口限流 |
Sentinel、熔断、限流 |
| 链路与可观测 |
Micrometer Tracing(已接 OpenTelemetry 语义);日志带 traceId 贯穿全链 |
链路追踪、OTel |
⑦ 测试与工程
| 主题 |
一句话要点 |
检索关键词 |
| 测试切片 |
@SpringBootTest 全量;@WebMvcTest / @DataJpaTest / @JsonTest 按层切片提速 |
切片测试 |
| 版本基线 |
Framework 6 / Boot 3 起基线 JDK 17 + Jakarta EE 9(javax.* → jakarta.*),升级最大改造点在包名迁移 |
Jakarta、Boot 3 升级 |
版本演进速查(锚点:代际)
| 版本 |
年份 |
定位 |
代表特性 |
| Framework 4 / Boot 1 |
2013–2014 |
经典代 |
Boot 起步、Java 8 配置风格 |
| Framework 5 / Boot 2 |
2017–2018 |
主流长周期代 |
响应式 WebFlux、JDK 8–11 基线 |
| Framework 6 / Boot 3 |
2022–11 |
当前主力代 |
JDK 17 基线、Jakarta 命名空间、原生镜像支持(AOT) |
| Framework 7 / Boot 4 |
2025-11 |
新一代 |
面向 JDK 17+ 与模块化(细节待核实) |
四、流程图(图谱一页图)
flowchart TD
subgraph S1["① 核心容器 IoC"]
A1["Bean 生命周期"]
A2["三级缓存 · 循环依赖"]
A3["作用域 · 注入方式"]
end
subgraph S2["② AOP 与代理"]
B1["JDK / CGLIB 代理"]
B2["代理失效清单"]
B3["事务 · 传播行为"]
end
subgraph S3["③ Spring MVC"]
C1["DispatcherServlet 主线"]
C2["Filter · Interceptor"]
C3["全局异常 · CORS"]
end
subgraph S4["④ 数据访问"]
D1["事务管理器"]
D2["MyBatis / JPA"]
D3["HikariCP"]
end
subgraph S5["⑤ Spring Boot"]
E1["自动装配"]
E2["配置体系 · Profile"]
E3["Starter · Actuator"]
end
subgraph S6["⑥ Spring Cloud"]
F1["Nacos 注册 · 配置"]
F2["Gateway 网关"]
F3["Sentinel 熔断限流"]
F4["链路追踪"]
end
subgraph S7["⑦ 测试与工程"]
G1["切片测试"]
G2["版本基线 · Jakarta"]
end
S1 -->|"AOP 织入"| S2
S2 ~~~ S3
S3 ~~~ S4
S4 ~~~ S5
S5 ~~~ S6
S6 ~~~ S7
层间竖排是阅读顺序(依赖关系见「二、原理与来由」);①② 是其余一切层的地基。
五、边界与关联
- 本条目是 Spring 体系地图:只给主题与一句话定位,展开进细分条目(建立后在
content/README.md 登记)。
- 不覆盖:Java 语言与 JVM 本体(见 Java 知识图谱);消息队列、K8s 部署等周边(仅在 ⑥ 层提及接入方式)。
- 关联条目:Java 知识图谱(本条目是其 ⑥ 层生态框架的展开)。
六、出处
| 来源 |
位置 |
核实日期 |
| Spring 官方文档(Framework / Boot / Cloud Reference) |
docs.spring.io |
2026-10-08 |
| 个人实践(长期 Spring Boot 后端开发与排查经验) |
各层一句话要点为经验浓缩 |
2026-10-08 |
七、存疑与待办
- Framework 7 / Boot 4(2025-11 发布)的具体新特性与破坏性变更未逐条核实——待核对官方 release notes(2026-10-08 记)。
- WebFlux 响应式栈的适用边界(何时值得用)未展开,本版仅登记在版本表中——待补(2026-10-08 记)。