Spring
Spring 框架核心源码解析,深入理解 IOC、AOP 与事务机制的实现细节。
All Articles in Spring
17-Spring5核心源码-事务-解析@Transaction生成代理对象
摘要: 本文基于上篇注册的事务组件,分析 Spring 如何定位 @Transactional 注解并为目标 bean 生成代理对象。核心入口在 AbstractAutoProxyCreator#wrapIfNecessary:通过 getAdvicesAndAdvisorsForBean 获取适用于当前 bean 的通知列表(含上篇注册的 BeanFactoryTransactionAttributeSourceAdvisor),若有匹配通知则调用 createProxy 创建代理对象。匹配逻辑在 AopUtils#canApply 中:先用 ClassFilter 过滤类级别,再用 MethodMatcher 遍历目标类及父接口的所有方法,TransactionAttributeSourcePointcut 的 matches 方法会检查方法上是否存在 @Transactional 注解,匹配成功则说明需要对该 bean 进行事务代理增强。
18-Spring5核心源码-事务-事务相关类简要分析
摘要: 本文简要梳理 Spring 声明式事务涉及的核心类体系。TransactionAttributeSource 接口负责解析事务属性,其实现类 AnnotationTransactionAttributeSource 从 @Transactional 注解中提取传播行为、隔离级别等信息。TransactionManager 是事务管理器顶层接口,AbstractPlatformTransactionManager 抽象类提供提交回滚等通用能力,DataSourceTransactionManager 是基于数据源的常用实现。TransactionStatus 接口代表事务运行时状态,DefaultTransactionStatus 为默认实现。DataSourceTransactionObject 则封装了数据库连接持有对象。这些类协同工作,构成从注解解析到事务执行再到连接管理的完整事务处理链路。
16-Spring5核心源码-事务-声明式事务注解驱动xml标签解析
摘要: 本文分析 <tx:annotation-driven/> 标签的解析过程。该标签由 TxNamespaceHandler 处理,具体由 AnnotationDrivenBeanDefinitionParser 解析。标签支持 mode(默认 proxy/AOP 模式或 aspectj 模式)、order(排序)、proxy-target-class(Cglib/JDK 选择)、transaction-manager(事务管理器名)四个属性。解析核心做了三件事:注册 TransactionalEventListenerFactory 监听器工厂;注册 InfrastructureAdvisorAutoProxyCreator(AOP 代理后处理器);注册 AnnotationTransactionAttributeSource(解析 @Transactional 注解)、TransactionInterceptor(事务拦截器 Advice)、BeanFactoryTransactionAttributeSourceAdvisor(事务Advisor)。这些组件共同构成了声明式事务的基础设施。
15-Spring5核心源码-AOP-基于@Aspect注解分析AOP实现原理
摘要: 本文以 XML 配置 <aop:aspectj-autoproxy/> 为入口分析 @AspectJ 注解驱动的 AOP 实现原理。标签由 AspectJAutoProxyBeanDefinitionParser 解析,核心工作是调用 AopConfigUtils 将 AnnotationAwareAspectJAutoProxyCreator 注册到 Spring 容器中——该类是 AOP 的核心后处理器,继承自 AbstractAutoProxyCreator。同时通过 useClassProxyingIfNecessary 配置 proxy-target-class 等属性。AnnotationAwareAspectJAutoProxyCreator 在 bean 创建阶段通过 wrapIfNecessary 方法扫描所有 @Aspect 切面类,提取 @Before/@Around/@After 等通知方法,将其封装为 Advisor 并在匹配的 bean 上生成代理对象,完成切面织入。
14-Spring5核心源码-AOP-Spring封装的动态代理原理
摘要: 本文以 ProxyFactory 为入口分析 Spring 对动态代理的封装。ProxyFactory 继承体系包含三层:ProxyConfig 提供代理配置信息(proxyTargetClass 控制 Cglib/JDK 选择、exposeProxy 控制代理暴露);Advised 定义通知管理接口;AdvisedSupport 实现核心逻辑。使用时只需创建 ProxyFactory 并 addAdvice 添加增强即可获得代理对象。Spring 内部根据目标类是否有接口自动选择 JDK 动态代理(JdkDynamicAopProxy)或 Cglib 动态代理(CglibAopProxy),并通过 AdvisedSupport 统一管理 Advisor 链,最终在调用时通过拦截器链逐层执行增强逻辑。
13-Spring5核心源码-AOP-JDK动态代理和多层增强写法
摘要: 本文分两部分介绍 AOP 动态代理基础。第一部分通过 JDK 动态代理标准示例展示基本用法:定义接口 Animal 和实现类 Dog,编写 InvocationHandler 在 invoke 方法中添加前置/后置增强逻辑,通过 Proxy.newProxyInstance 创建代理对象。第二部分针对"多层增强"需求,按照 Spring 的设计思路重构:引入 MethodInterceptor 拦截器接口和 MethodInvocation 执行器接口,将拦截器组织为责任链模式,每个拦截器通过 invocation.proceed() 链式调用下一个拦截器,最终优雅地实现了对同一方法的多次增强。这为理解 Spring AOP 的拦截器链设计奠定了基础。





