Spring 事务失效场景与原因分析
“@Transactional 怎么不生效?” 这个问题被问了无数遍。本文总结 8 个事务失效场景,每个都有代码复现和修正方案。 一、事务不生效的总根源 1.1 Spring 事务是 AOP 代理实现的 1.2 所有失效原因最终都归结为”代理没有生效”或”异常没有触发回滚” 二、场景 1:非 public 方法 2.1 原理——CGLIB 无法代理 private/protected 方法 2.2 错误示例与修正 三、场景 2:自调用问题 3.1 同类中方法 A 调用方法 B,B 的事务失效 3.2 解决方案——AopContext.currentProxy() 或拆分...
Spring AOP 实现方式对比
Spring AOP 默认用 JDK 动态代理还是 CGLIB?为什么 @Transactional 自调用会失效?理解代理机制才能避开这些坑。 一、AOP 的核心概念 1.1 Aspect / JoinPoint / Advice / Pointcut / Weaving 1.2 Spring AOP vs AspectJ 的区别 1.3 Spring AOP 是基于代理的——只能拦截方法 二、JDK 动态代理 2.1 基于接口的代理——必须有接口 2.2 Proxy.newProxyInstance() 原理 2.3 Invocation...
Spring IoC 容器原理
Spring 的核心就是 IoC 容器。从 BeanDefinition 的定义到 Bean 的实例化,容器内部经历了什么? 一、IoC 的概念与优势 1.1 控制反转——创建对象的权利交给容器 1.2 DI 依赖注入——IoC 的具体实现方式 1.3 IoC 容器解决了什么问题 二、BeanDefinition——Bean 的”配方” 2.1 BeanDefinition 的元数据——scope / lazy-init / depends-on / init-method / destroy-method 2.2 注册方式:XML → @B...