一、为什么先讲架构

读源码最怕一头扎进 refresh() 里,结果迷失在几十个方法调用中,不知道自己究竟在哪一层。

先有一张「地图」,知道 Spring 由哪些模块组成、谁依赖谁、各自负责什么,后面每一步你才知道自己站在地基上、还是站在楼顶上。本篇就是这张地图。

二、Spring 的设计哲学

理解架构前,先记住三条贯穿始终的设计原则:

  1. 分层与模块化:每个能力拆成独立 jar(spring-core、spring-beans…),按需引入,互不绑架。
  2. 依赖倒置:上层依赖抽象(如 BeanFactory)而非具体实现,所以容器可替换、可扩展。
  3. 一切皆可扩展:通过 BeanPostProcessorBeanFactoryPostProcessorAwareImportSelector 等钩子开放扩展点——这是 Spring 生命力的来源,后面进阶篇会专门汇总。

三、模块全景

下图按功能把 Spring 划分为五大组,箭头表示依赖方向。建议把它保存下来,每篇源码追踪时对照着看。

(配图:Spring Framework 模块全景 —— 上层模块均依赖核心容器,核心容器内部 context → beans → core)

五大分组一览:

  • 核心容器 Core Containerspring-core / spring-beans / spring-context / spring-expression
  • AOP 与 Aspectsspring-aop / spring-aspects
  • 数据访问 / 集成spring-jdbc / spring-tx / spring-orm / spring-oxm / spring-jms
  • Webspring-web / spring-webmvc / spring-websocket / spring-webflux
  • Testspring-test

四、重点:核心容器的依赖关系(本系列地基)

这是整个系列的地基,必须吃透。四个模块自底向上:

  • spring-core:最底层,提供通用工具(ClassUtilsAssert、资源加载 Resource 等)。所有模块都依赖它,它不依赖任何其他 Spring 模块。
  • spring-beans:定义 BeanDefinitionBeanFactoryBeanWrapper,是 IoC 的基石。依赖 spring-core
  • spring-context:在 beans 之上提供 ApplicationContext(IoC 门面),并加上事件发布、国际化、资源加载、校验等企业级能力。依赖 spring-beansspring-core,以及 spring-expression
  • spring-expression:SpEL 表达式语言,被 context 用来解析 @Value、属性占位符等。依赖 spring-core

依赖方向一句话:context → beans → core,越往下越基础,上层始终依赖下层。

五、高频模块一句话职责

  • spring-core:工具箱,啥都用的底层支撑。
  • spring-beans:Bean 的定义与工厂,IoC 内核。
  • spring-context:IoC 门面 + 企业级能力(事件 / 国际化)。
  • spring-aop:AOP 核心(Advice / Pointcut / ProxyFactory)。
  • spring-jdbc / spring-tx:JDBC 模板与事务抽象。
  • spring-webmvc:MVC 实现(就是 DispatcherServlet 那一套)。
  • spring-test:与 JUnit 等测试框架的集成。

六、和我们系列路线的对应

  • 准备篇(本篇):建立地图
  • IoC 核心篇:主要落在 spring-beans + spring-context
  • AOP 篇:落在 spring-aop
  • MVC 篇:落在 spring-webmvc
  • Boot 篇:在 spring-context 之上做自动配置
  • 事务篇:落在 spring-tx
  • 进阶篇:横跨各模块的扩展点

看到没?80% 的源码系列其实就围着 beans + context 转。把这两个摸透,其余都是在此之上的扩展。

七、小结

记住一句话:Spring 是一组分层的模块,核心容器是所有能力的地基,ApplicationContext 是绝大多数开发者打交道的大门。

下一篇我们正式钻进 IoC,从最核心的一个问题讲起:BeanFactoryApplicationContext 到底差在哪。


如果这篇对你有帮助,欢迎 点赞 · 收藏 · 关注 三连支持。

Spring 源码系列共 30 篇,由浅入深持续更新中。有疑问或想深挖的源码点,评论区告诉我,下篇见。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐