Spring 源码:从零出发,重新认识 Spring 整体架构与核心模块
一、Spring 整体定位与设计哲学
1、Spring 本质
2、三大核心思想
-
IoC(控制反转):不再 new Object(),由 Spring 实例化、装配、销毁 -
DI(依赖注入):IoC 的具体手段,自动注入依赖 -
AOP(面向切面):动态代理,在不修改代码前提下增强方法(日志、事务、缓存)
3、架构原则
-
模块化、可插拔、依赖倒置(高层不依赖底层实现,依赖抽象) -
所有功能基于核心容器扩展

-
核心容器层:框架根基,提供 IoC/DI、Bean 生命周期管理,所有模块依赖于此 -
AOP 层:基于核心容器,实现横切关注点(日志、事务、权限)分离 -
数据访问 / 集成层:基于 AOP 与核心容器,封装 JDBC、ORM、事务、消息 -
Web 层:基于数据访问与核心容器,提供 MVC、响应式、WebSocket 等 Web 能力 -
测试层:独立于业务层,提供单元 / 集成测试支持
二、逐模块,超详细拆解
1、Core Container(核心容器:Spring 根基)
(1)spring-core(基础工具包:底层底座)
-
提供整个框架通用能力 -
不涉及 Bean,只做底层工具
-
统一抽象文件、classpath、URL、字节流 -
源码入口:DefaultResourceLoader
-
类加载、反射、方法调用、字段操作 -
Spring 大量使用反射创建对象
-
类型转换系统:String ↔ int、Date、Collection 等 -
@Value 底层依赖它
-
泛型解析神器,解决 Java 泛型擦除 -
Spring 依赖注入、泛型处理核心
-
别名注册:Bean 可以有多个名字
-
资源抽象:Resource 接口统一文件、URL、类路径、云存储等资源访问 -
类型转换:ConversionService、TypeConverter 实现安全类型转换 -
工具类:StringUtils、Assert、ClassUtils、ReflectionUtils(反射工具) -
日志适配:统一 JCL、SLF4J、Log4j 等日志框架 -
IoC 基础:提供依赖注入的底层支持
(2)spring-beans(IoC 核心:Bean 工厂)
-
定义 Bean、加载 Bean、创建 Bean、属性注入、依赖处理 -
最底层容器
-
存储:类名、scope、lazy-init、构造参数、属性、依赖、是否抽象等 -
实现:RootBeanDefinition、GenericBeanDefinition
-
注册、保存、获取 BeanDefinition -
实现:DefaultListableBeanFactory
-
定义 getBean()、containsBean()、isSingleton() 等 -
延迟加载,只在获取时初始化
-
Spring 最底层、最完整的 IoC 容器
-
同时实现:BeanFactory、BeanDefinitionRegistry、SingletonBeanRegistry
-
包装 Bean 实例,统一属性赋值(setter) -
DI 注入真正执行者
-
实例化策略:工厂方法、构造器、简单实例化 -
默认:SimpleInstantiationStrategy
-
读取→ 解析 → 生成 BeanDefinition -
通过 BeanDefinition 实例化对象 -
填充属性(DI 注入) -
执行初始化方法(@PostConstruct、afterPropertiesSet) -
成为成熟 Bean,放入单例池
-
BeanFactory:基础容器接口,延迟加载,提供 getBean()、containsBean() -
DefaultListableBeanFactory:默认完整实现,Spring 最底层容器 -
BeanDefinition:Bean 定义抽象(类名、作用域、依赖、属性) -
BeanWrapper:Bean 属性包装器,实现属性注入与类型转换
(3)spring-context(高级容器:ApplicationContext)
-
扩展 BeanFactory,提供企业级能力 -
生产环境真正使用的容器 -
BeanFactory vs ApplicationContext -
BeanFactory:底层、轻量、延迟加载 -
ApplicationContext:立即加载单例、事件、国际化、资源、AOP 自动支持
-
BeanFactory -
ResourceLoader -
ApplicationEventPublisher -
MessageSource
-
模板方法:refresh() 是 Spring 启动总入口
refresh() {1. prepareRefresh(); // 准备、启动时间、环境2. obtainFreshBeanFactory(); // 创建 BeanFactory3. loadBeanDefinitions(); // 加载 Bean 定义4. prepareBeanFactory(); // 基础配置:类加载器、忽略依赖5. postProcessBeanFactory(); // 后置处理 BeanFactory6. invokeBeanFactoryPostProcessors();// 执行 BFPP:扫描、配置类解析7. registerBeanPostProcessors(); // 注册 BPP:AOP 前置、依赖注入底层8. initMessageSource(); // 国际化9. initApplicationEventMulticaster();// 事件广播10. onRefresh(); // 子类扩展(如 SpringBoot 内嵌Tomcat)11. registerListeners(); // 注册监听器12. finishBeanFactoryInitialization();// **实例化所有非懒单例 Bean**13. finishRefresh(); // 发布事件、启动完成}
-
XML 容器 -
注解容器(@Configuration、@ComponentScan)
-
容器启动 / 停止生命周期管理
-
事件发布 / 订阅:容器启动、自定义事件
-
预加载单例:启动时初始化所有单例 Bean(区别于 BeanFactory 延迟加载) -
国际化:MessageSource 支持多语言 -
事件机制:ApplicationEvent、ApplicationListener 事件发布 / 监听 -
资源加载:统一资源访问、配置文件解析(XML / 注解) -
企业级服务:JNDI、EJB 集成、定时任务(@Scheduled)、校验(Validation)
(4)spring-expression(SpEL 表达式)
-
ExpressionParser -
SpelExpressionParser -
EvaluationContext
-
@Value(“#{systemProperties[‘user.dir’]}”) -
XML、注解动态赋值
-
动态获取 / 设置 Bean 属性:#{user.name} -
调用方法 / 静态方法:#{T(Math).max(1,2)} -
运算、逻辑判断、集合操作、正则匹配 -
支持注解(@Value(“#{…}”))与 XML 配置
2、AOP 模块(Spring 第二核心)
(1)spring-aop(动态代理核心)
-
Joinpoint:连接点 → 方法执行 -
Pointcut:切点 → 匹配哪些方法 -
Advice:通知 → 增强逻辑(前置、后置、异常、返回、环绕) -
Advisor:Pointcut + Advice → 完整切面单元 -
Aspect:切面 = 多个 Advisor
-
JdkDynamicAopProxy(接口) -
CglibAopProxy(类)
-
创建代理的 API
-
方法拦截器(环绕通知核心)
-
选择 JDK/CGLIB 代理
-
AOP 核心入口:AbstractAutoProxyCreator -
生命周期最后一步包装成代理
-
容器扫描切面 @Aspect -
生成 Advisor 列表 -
遍历 Bean,判断是否需要代理 -
创建 AopProxy 代理对象 -
调用方法→ 执行拦截器链 -
事务 @Transactional 就是 AOP + 事务管理器 实现。
-
代理机制:JDK 动态代理(接口)、CGLIB(类,无接口) -
核心概念:切面(Aspect)、通知(Advice)、切点(Pointcut)、连接点(JoinPoint) -
关键类:ProxyFactory、Advisor、MethodInterceptor
3、Data Access/Integration(数据访问)(非核心)
(1)spring-jdbc
-
JdbcTemplate:核心模板类,封装连接、语句、结果集、异常处理 -
NamedParameterJdbcTemplate:支持命名参数(:name) -
DataSource:数据源管理、连接池集成 -
异常转换:将 JDBC 异常转为 Spring 统一 DataAccessException
(2)spring-tx(事务)
-
DataSourceTransactionManager(JDBC) -
JtaTransactionManager(分布式)
-
传播行为、隔离级别、超时、只读
-
事务状态:是否新事务、是否 rollbackOnly
-
AOP 环绕通知 -
开始事务→ 执行方法 → 成功提交 / 异常回滚
-
PlatformTransactionManager:事务管理器接口(JDBC/JTA 实现) -
@Transactional:声明式事务注解(传播行为、隔离级别、超时、回滚规则) -
TransactionTemplate:编程式事务模板
(3)spring-orm
(4)spring-oxm(对象 / XML 映射)
(5)spring-jms(消息服务集成)
4、Web 模块(非核心)
(1)spring-web
-
DispatcherServlet:前端控制器,统一请求分发 -
Controller/RequestMapping:请求映射、处理器 -
ViewResolver:视图解析(JSP/Thymeleaf/Freemarker) -
拦截器:HandlerInterceptor 请求拦截 -
RESTful 支持、数据绑定、校验、异常处理
(2)spring-webmvc
-
请求→ DispatcherServlet -
HandlerMapping → 找到 @RequestMapping -
HandlerAdapter → 执行方法 -
返回 ModelAndView / JSON -
ViewResolver → 渲染页面
-
DispatcherServlet -
RequestMappingHandlerMapping -
RequestMappingHandlerAdapter -
ExceptionHandlerExceptionResolver
(4)spring-webflux(响应式 Web)
5、Test 模块(非核心)
-
集成 JUnit 4/5、TestNG -
@SpringBootTest、@ContextConfiguration:加载 Spring 上下文 -
模拟对象(MockMvc、MockHttpServletRequest) -
事务测试:测试后自动回滚 -
缓存、Web、数据访问测试支持
夜雨聆风