1. 声明式事务(@Transactional、Spring AOP)的工作原理,代理拦截?
声明式事务(@Transactional、Spring AOP)的工作原理是什么?代理拦截如何实现?
- Spring AOP 事务代理
- @Transactional 的拦截流程
- 自调用失效原理
Spring 的 @Transactional 通过 AOP 代理实现:Spring 为标注了 @Transactional 的 Bean 创建代理对象(JDK 动态代理或 CGLIB 代理),代理在方法调用前后拦截,在方法前开启事务、方法后提交或回滚。拦截器(TransactionInterceptor)负责:获取事务配置(传播、隔离、超时、rollbackFor)、开启事务、执行目标方法、根据异常决定提交或回滚、清理资源。由于是代理拦截,只有通过代理对象调用方法才会触发事务,类内部自调用(this.method())不会经过代理,导致事务失效。
核心是"代理拦截 + 事务管理器"。Spring 通过代理把事务管理横切到业务方法上,使业务代码不关心事务细节。理解代理机制是理解自调用失效、事务边界等问题的前提。