事物开启
@EnableTransactionManagement注解向Spring容器中添加了两个Bean
- AutoProxyRegistrar
注册InfrastructureAdvisorAutoProxyCreator的Bean对象,该bean对象继承了AbstractAdvisorAutoProxyCreator,是一个BeanPostProcessor,会在初始化后步骤中去寻找Advisor类型的Bean,如果某个Bean匹配Advisor,会利用动态代理产生一个代理对象。
- ProxyTransactionManagementConfiguration
是一个配置类,定义了三个bean
BeanFactoryTransactionAttributeSourceAdvisor:一个Advisor
AnnotationTransactionAttributeSource:用来判断某个类或方法上是否存在@Transactional注解。
TransactionInterceptor:当某个类中存在@Transactional注解时,会产生一个代理对象作为Bean,代理对象在执行某个方法时,最终就会进入到TransactionInterceptor的invoke()方法。
事物执行的原理
1.Spring事务底层是基于数据库事务和AOP机制的
2.⾸先对于使⽤了@Transactional注解的Bean,Spring会创建⼀个代理对象作为Bean
3.当调⽤代理对象的⽅法时,会先判断该⽅法上是否加了@Transactional注解
4.如果加了,那么则利⽤事务管理器创建⼀个数据库连接
5.并且修改数据库连接的autocommit属性为false,禁⽌此连接的⾃动提交,这是实现Spring事务⾮
常重要的⼀步
6.然后执⾏当前⽅法,⽅法中会执⾏sql
7.执⾏完当前⽅法后,如果没有出现异常就直接提交事务
8.如果出现了异常,并且这个异常是需要回滚的就会回滚事务,否则仍然提交事务
9.Spring事务的隔离级别对应的就是数据库的隔离级别
10.Spring事务的传播机制是Spring事务⾃⼰实现的,也是Spring事务中最复杂的
11.Spring事务的传播机制是基于数据库连接来做的,⼀个数据库连接⼀个事务,如果传播机制配置为需要新开⼀个事务,那么实际上就是先建⽴⼀个数据库连接,在此新数据库连接上执⾏sql
事物执行的流程
流程图待补充..
事物的传播机制
分类
案例