乐于分享
好东西不私藏

Spring 源码:从零出发,重新认识 Spring 整体架构与核心模块

Spring 源码:从零出发,重新认识 Spring 整体架构与核心模块

做 Java 开发的同学,几乎每天都在和 Spring 框架打交道 —— 无论是 Spring 核心容器,还是 Spring Boot、Spring Cloud,本质上都离不开 Spring 底层架构的支撑。我们习惯了用 @Autowired 注入 bean、用 @Component 定义组件,却很少深究:Spring 到底是由哪些模块组成的?这些模块之间如何协同工作?为什么它能成为 Java 后端开发的 “基石”?
很多开发者觉得 Spring 源码晦涩难懂、架构庞大,甚至认为 “日常开发只需会用 API,没必要深入了解架构”。但实际上,只有读懂 Spring 的整体架构与核心模块,才能真正理解 Spring 的设计思想,搞懂依赖注入、控制反转的底层逻辑,不仅能轻松排查开发中的各类框架相关问题,还能为后续学习 Spring Boot、Spring Cloud 源码打下坚实基础,摆脱 “只会用、不懂原理” 的困境。
本文将从零基础视角出发,拆解 Spring 的整体架构设计、核心模块分工(如核心容器、AOP、事务管理等),讲解各模块的核心作用与协同关系,帮你从零建立对 Spring 架构的整体认知,轻松入门 Spring 源码学习,读懂框架背后的设计逻辑。

一、Spring 整体定位与设计哲学

1、Spring 本质

一个用于管理 Java 对象生命周期与依赖关系的容器 + 企业级能力扩展集。
Spring Framework 是一个分层、模块化的 Java 全栈轻量级框架,核心围绕 IoC(控制反转) 与 AOP(面向切面编程) 两大基石设计,整体划分为 核心容器、AOP、数据访问 / 集成、Web、测试 五大模块簇,共约 20 个子模块,可按需引入、松耦合协同。

2、三大核心思想

  • IoC(控制反转):不再 new Object(),由 Spring 实例化、装配、销毁
  • DI(依赖注入):IoC 的具体手段,自动注入依赖
  • AOP(面向切面):动态代理,在不修改代码前提下增强方法(日志、事务、缓存)

3、架构原则

  • 模块化、可插拔、依赖倒置(高层不依赖底层实现,依赖抽象)
  • 所有功能基于核心容器扩展
Spring 采用自底向上、层层依赖的分层架构,下层为上层提供基础能力,上层基于下层扩展功能:
  • 核心容器层:框架根基,提供 IoC/DI、Bean 生命周期管理,所有模块依赖于此
  • AOP 层:基于核心容器,实现横切关注点(日志、事务、权限)分离
  • 数据访问 / 集成层:基于 AOP 与核心容器,封装 JDBC、ORM、事务、消息
  • Web 层:基于数据访问与核心容器,提供 MVC、响应式、WebSocket 等 Web 能力
  • 测试层:独立于业务层,提供单元 / 集成测试支持

二、逐模块,超详细拆解

1、Core Container(核心容器:Spring 根基)

(1)spring-core(基础工具包:底层底座)

org.springframework.core
核心职责
  • 提供整个框架通用能力
  • 不涉及 Bean,只做底层工具
关键组件/ 类
Resource / ResourceLoader
  • 统一抽象文件、classpath、URL、字节流
  • 源码入口:DefaultResourceLoader
ClassUtils / ReflectionUtils
  • 类加载、反射、方法调用、字段操作
  • Spring 大量使用反射创建对象
ConversionService / ConversionServiceFactory
  • 类型转换系统:String ↔ int、Date、Collection 等
  • @Value 底层依赖它
ResolvableType
  • 泛型解析神器,解决 Java 泛型擦除
  • Spring 依赖注入、泛型处理核心
AliasRegistry
  • 别名注册:Bean 可以有多个名字
核心定位整个 Spring 的基础工具库,所有模块都依赖它
核心功能
  • 资源抽象:Resource 接口统一文件、URL、类路径、云存储等资源访问
  • 类型转换:ConversionService、TypeConverter 实现安全类型转换
  • 工具类:StringUtils、Assert、ClassUtils、ReflectionUtils(反射工具)
  • 日志适配:统一 JCL、SLF4J、Log4j 等日志框架
  • IoC 基础:提供依赖注入的底层支持
总结:spring-core 是 Spring 的 “工具类库”,所有模块都依赖它。

(2)spring-beans(IoC 核心:Bean 工厂)

包:org.springframework.beans
核心职责:
  • 定义 Bean、加载 Bean、创建 Bean、属性注入、依赖处理
  • 最底层容器
关键类:
BeanDefinition(Bean 的 “设计图纸”)
  • 存储:类名、scope、lazy-init、构造参数、属性、依赖、是否抽象等
  • 实现:RootBeanDefinition、GenericBeanDefinition
BeanDefinitionRegistry
  • 注册、保存、获取 BeanDefinition
  • 实现:DefaultListableBeanFactory
BeanFactory(最顶层容器接口)
  • 定义 getBean()、containsBean()、isSingleton() 等
  • 延迟加载,只在获取时初始化
DefaultListableBeanFactory
  • Spring 最底层、最完整的 IoC 容器
  • 同时实现:BeanFactory、BeanDefinitionRegistry、SingletonBeanRegistry
BeanWrapper / AbstractNopBeanWrapper
  • 包装 Bean 实例,统一属性赋值(setter)
  • DI 注入真正执行者
InstantiationStrategy
  • 实例化策略:工厂方法、构造器、简单实例化
  • 默认:SimpleInstantiationStrategy
Bean 创建核心流程(极简源码版):
  1. 读取→ 解析 → 生成 BeanDefinition
  2. 通过 BeanDefinition 实例化对象
  3. 填充属性(DI 注入)
  4. 执行初始化方法(@PostConstruct、afterPropertiesSet)
  5. 成为成熟 Bean,放入单例池
核心定位:IoC 容器核心实现,负责 Bean 的创建、装配、管理
核心组件:
  • BeanFactory:基础容器接口,延迟加载,提供 getBean()、containsBean()
  • DefaultListableBeanFactory:默认完整实现,Spring 最底层容器
  • BeanDefinition:Bean 定义抽象(类名、作用域、依赖、属性)
  • BeanWrapper:Bean 属性包装器,实现属性注入与类型转换
核心能力Bean 生命周期管理、依赖注入(DI)、属性填充、实例化策略
总结:spring-beans = 如何制造、组装 Bean

(3)spring-context(高级容器:ApplicationContext)

包:org.springframework.context
核心职责:
  • 扩展 BeanFactory,提供企业级能力
  • 生产环境真正使用的容器
  • BeanFactory vs ApplicationContext
  • BeanFactory:底层、轻量、延迟加载
  • ApplicationContext:立即加载单例、事件、国际化、资源、AOP 自动支持
关键类:
ApplicationContext
继承:
  • BeanFactory
  • ResourceLoader
  • ApplicationEventPublisher
  • MessageSource
AbstractApplicationContext
  • 模板方法:refresh() 是 Spring 启动总入口
refresh () 核心 12 步(Spring 启动灵魂)
refresh() {   1. prepareRefresh();               // 准备、启动时间、环境   2. obtainFreshBeanFactory();        // 创建 BeanFactory   3. loadBeanDefinitions();           // 加载 Bean 定义   4. prepareBeanFactory();            // 基础配置:类加载器、忽略依赖   5. postProcessBeanFactory();        // 后置处理 BeanFactory   6. invokeBeanFactoryPostProcessors();// 执行 BFPP:扫描、配置类解析   7. registerBeanPostProcessors();    // 注册 BPP:AOP 前置、依赖注入底层   8. initMessageSource();             // 国际化   9. initApplicationEventMulticaster();// 事件广播  10. onRefresh();                    // 子类扩展(如 SpringBoot 内嵌Tomcat)  11. registerListeners();             // 注册监听器  12. finishBeanFactoryInitialization();// **实例化所有非懒单例 Bean**  13. finishRefresh();                // 发布事件、启动完成}
第 12 步是 Bean 真正创建的地方。
ClassPathXmlApplicationContext / AnnotationConfigApplicationContext
  • XML 容器
  • 注解容器(@Configuration、@ComponentScan)
Lifecycle / DefaultLifecycleProcessor
  • 容器启动 / 停止生命周期管理
ApplicationEvent & ApplicationListener
  • 事件发布 / 订阅:容器启动、自定义事件
核心定位:高级 IoC 容器,扩展 BeanFactory,提供企业级功能
核心接口:ApplicationContext(生产环境首选,继承 BeanFactory)
核心功能:
  • 预加载单例:启动时初始化所有单例 Bean(区别于 BeanFactory 延迟加载)
  • 国际化:MessageSource 支持多语言
  • 事件机制:ApplicationEvent、ApplicationListener 事件发布 / 监听
  • 资源加载:统一资源访问、配置文件解析(XML / 注解)
  • 企业级服务:JNDI、EJB 集成、定时任务(@Scheduled)、校验(Validation)
关键实现:ClassPathXmlApplicationContext、AnnotationConfigApplicationContext
总结:context = 完整的 Spring 容器,refresh () 是启动总开关

(4)spring-expression(SpEL 表达式)

包:org.springframework.expression
核心功能:运行时读取 / 操作对象、方法、属性、运算符、集合
关键类:
  • ExpressionParser
  • SpelExpressionParser
  • EvaluationContext
使用场景:
  • @Value(“#{systemProperties[‘user.dir’]}”)
  • XML、注解动态赋值
核心定位:Spring 表达式语言(SpEL),运行时动态操作对象图
核心功能:
  • 动态获取 / 设置 Bean 属性:#{user.name}
  • 调用方法 / 静态方法:#{T(Math).max(1,2)}
  • 运算、逻辑判断、集合操作、正则匹配
  • 支持注解(@Value(“#{…}”))与 XML 配置

2、AOP 模块(Spring 第二核心)

(1)spring-aop(动态代理核心)

思想:不修改目标类,对方法进行增强
关键AOP 术语:
  • Joinpoint:连接点 → 方法执行
  • Pointcut:切点 → 匹配哪些方法
  • Advice:通知 → 增强逻辑(前置、后置、异常、返回、环绕)
  • Advisor:Pointcut + Advice → 完整切面单元
  • Aspect:切面 = 多个 Advisor
关键类:
AopProxy
  • JdkDynamicAopProxy(接口)
  • CglibAopProxy(类)
ProxyFactory
  • 创建代理的 API
MethodInterceptor
  • 方法拦截器(环绕通知核心)
DefaultAopProxyFactory
  • 选择 JDK/CGLIB 代理
BeanPostProcessor
  • AOP 核心入口:AbstractAutoProxyCreator
  • 生命周期最后一步包装成代理
AOP 源码流程极简版:
  • 容器扫描切面 @Aspect
  • 生成 Advisor 列表
  • 遍历 Bean,判断是否需要代理
  • 创建 AopProxy 代理对象
  • 调用方法→ 执行拦截器链
  • 事务 @Transactional 就是 AOP + 事务管理器 实现。
核心定位Spring 原生 AOP 实现,基于动态代理
核心组件
  • 代理机制:JDK 动态代理(接口)、CGLIB(类,无接口)
  • 核心概念:切面(Aspect)、通知(Advice)、切点(Pointcut)、连接点(JoinPoint)
  • 关键类:ProxyFactory、Advisor、MethodInterceptor
核心能力:方法拦截、前置 / 后置 / 环绕通知、异常处理

3、Data Access/Integration(数据访问)(非核心)

(1)spring-jdbc

核心定JDBC 抽象层,简化原生 JDBC 开发
核心组件
  • JdbcTemplate:核心模板类,封装连接、语句、结果集、异常处理
  • NamedParameterJdbcTemplate:支持命名参数(:name)
  • DataSource:数据源管理、连接池集成
  • 异常转换:将 JDBC 异常转为 Spring 统一 DataAccessException

(2)spring-tx(事务)

核心接口:
PlatformTransactionManager
  • DataSourceTransactionManager(JDBC)
  • JtaTransactionManager(分布式)
TransactionDefinition
  • 传播行为、隔离级别、超时、只读
TransactionStatus
  • 事务状态:是否新事务、是否 rollbackOnly
@Transactional 原理:
  • AOP 环绕通知
  • 开始事务→ 执行方法 → 成功提交 / 异常回滚
核心定位:声明式 / 编程式事务核心,基于 AOP 实现
核心组件:
  • PlatformTransactionManager:事务管理器接口(JDBC/JTA 实现)
  • @Transactional:声明式事务注解(传播行为、隔离级别、超时、回滚规则)
  • TransactionTemplate:编程式事务模板

(3)spring-orm

整合 Hibernate/JPA/MyBatis 等
核心定位:整合主流 ORM 框架,统一数据访问 API
支持框架:JPA、Hibernate、MyBatis、JDO
核心能力:事务集成、会话管理、异常转换、DAO 基类

(4)spring-oxm(对象 / XML 映射)

核心定位:Object-XML 映射,支持 JAXB、Castor、XStream
应用场景:XML 序列化 / 反序列化、接口数据转换

(5)spring-jms(消息服务集成)

核心定位:JMS(Java 消息服务)封装,简化消息生产 / 消费
核心组件:JmsTemplate、消息监听器容器、事务集成

4、Web 模块(非核心)

(1)spring-web

核心定位:基于 Servlet 的 MVC 实现,Spring 传统 Web 核心
核心组件
  • DispatcherServlet:前端控制器,统一请求分发
  • Controller/RequestMapping:请求映射、处理器
  • ViewResolver:视图解析(JSP/Thymeleaf/Freemarker)
  • 拦截器:HandlerInterceptor 请求拦截
  • RESTful 支持、数据绑定、校验、异常处理

(2)spring-webmvc

核心:DispatcherServlet
MVC 流程:
  • 请求→ DispatcherServlet
  • HandlerMapping → 找到 @RequestMapping
  • HandlerAdapter → 执行方法
  • 返回 ModelAndView / JSON
  • ViewResolver → 渲染页面
关键类:
  • DispatcherServlet
  • RequestMappingHandlerMapping
  • RequestMappingHandlerAdapter
  • ExceptionHandlerExceptionResolver
核心定位:基于 Servlet 的 MVC 实现,Spring 传统 Web 核心
核心组件:
DispatcherServlet:前端控制器,统一请求分发
Controller/RequestMapping:请求映射、处理器
ViewResolver:视图解析(JSP/Thymeleaf/Freemarker)
拦截器:HandlerInterceptor 请求拦截
RESTful 支持、数据绑定、校验、异常处理
核心定位:全双工通信,支持 WebSocket、SockJS(兼容浏览器)
应用场景:实时聊天、推送、在线协作

(4)spring-webflux(响应式 Web)

源码路径:org.springframework.web.reactive
核心定位:Spring 5+ 响应式 Web 框架,非阻塞 I/O、Reactor 实现
核心能力:适配高并发、少资源场景,支持注解与函数式编程

5、Test 模块(非核心)

spring-test
核心定位:单元 / 集成测试支持
核心功能:
  • 集成 JUnit 4/5、TestNG
  • @SpringBootTest、@ContextConfiguration:加载 Spring 上下文
  • 模拟对象(MockMvc、MockHttpServletRequest)
  • 事务测试:测试后自动回滚
  • 缓存、Web、数据访问测试支持

三、写在最后

1、spring-core、spring-beans、spring-context、spring-aop 是 Spring 四大核心模块,是 IoC、DI、AOP 的基础,必须深入学习。
2、数据访问、Web、Test 属于上层扩展模块,非内核源码,了解原理和使用即可。
3、Spring 整体启动与 Bean 管理的核心是 ApplicationContext 的 refresh () 方法。
4、事务、缓存等能力基于 AOP 实现,Web、JDBC 等都依赖核心容器运行。
5、Spring 核心机制由 IoC 容器管理 Bean 生命周期,AOP 实现方法动态增强。
6、Spring 上层功能(事务、Web、JDBC)均依赖核心容器与 AOP 实现。
如果本文对你有帮助,不妨点个赞,关注一下~欢迎在评论区留言交流,一起学习进步,共同成长!
注:本文为个人原创,AI 仅提供辅助支持。