Spring 知识图谱

一、一句话结论

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 官方文档(Framework / Boot / Cloud Reference) docs.spring.io 2026-10-08
个人实践(长期 Spring Boot 后端开发与排查经验) 各层一句话要点为经验浓缩 2026-10-08

七、存疑与待办