Spring 本身是没有事务的我们可以从 Spring 如何去实现对数据库事务的一个封装去讲。底层的运行原理就是你给方法加了Transactional这个注解。Spring 就会给这个类去生成一个代理对象。当我们调用这个方法的时候其实就是走的代理对象的逻辑。方法在执行前自动开启数据库事务方法正常执行完成后自动提交事务。如果抛出异常就会自动回滚事务。面试中还会问到事务失效也就是我们常说的代理失效。大部分事务的问题根源基本上就是方法是private。不是公共方法我们不能代理直接调用原对象的方法也会出现失效Spring 事务还有一个核心配置传播机制传播机制是 Spring 专门处理多个事务嵌套的场景。常用的有两个REQUIRED就是默认值。有现成的事务就用现成事务没有就会新建立一个事务。大部分场景都用这个REQUIRES_NEW不管有没有现成的事务都会新建立一个独立的事务。如记录操作日志NESTED嵌套事务NEVER从不创建事务