Spring中的@Transactional的工作原理
目录
- 1、原理
- 2、用法
- 3、拓展
1、原理 事务的概念想必大家都很清楚,其ACID特性在开发过程中占有重要的地位。同时在并发过程中会出现一些一致性问题,为了解决一致性问题,也出现了四种隔离级别,这里就不再详述了,感兴趣的可以去查一下。下面我们讨论一下Spring中的事务。
Spring中的事务有两种:
- 编程式事务
- 声明式事务
而编程式事务就需要我们修改代码来进行事务管理。这种方法看似很麻烦,但是它的存在自有它的道理,上面我们讲到的声明式事务控制,其控制的细粒度只能作用到方法上,无法在代码块中实现声明式事务控制。我们都知道,一旦加上事务,程序的运行效率就会降低,所以编程式事务也有它的用武之地。
但是我们的广大劳动人民也是智慧的。直接将需要事务的代码块独立成方法,这样仍然可以使用声明式事务。当然在开发中具体情况要具体分析了。
2、用法 事务的传播行为:
文章图片
事务的隔离级别:
文章图片
@Transactional属性
文章图片
示例代码:
@Service@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)public class RoleServiceImpl implements RoleService {@Autowiredprivate RoleDao roleDao; @Transactional(propagation = Propagation.SUPPORTS,readOnly = true)@Overridepublic ListfindAllRoles() {return roleDao.selectAllRoles(); }}
3、拓展 1、为什么声明式事务只能应用于方法上?
- 因为声明式事务是基于AOP实现的,AOP是基于动态代理实现的。
- 动态代理只会捕捉来自外部的方法调用,
- 意思就是类内部的方法调用类内部的另外方法,并不会发生事务行为。
推荐阅读
- netty系列之:不用怀疑,netty中的ByteBuf就是比JAVA中的好用
- WordPress,如何从帖子页面中的标签名称获取标签标签()
- SpringBoot|SpringBoot 项目使用hutool 工具进行 http 接口调用的处理方法
- #yyds干货盘点#动力节点王鹤Springboot教程笔记ORM操作MySQL
- 子目录中的WordPress子主题文件未覆盖
- Spring认证中国教育管理中心-Spring Data Elasticsearch教程三
- #yyds干货盘点# springcloud整合feign实现服务负载均衡,断路器
- Spring Boot实现用户注册验证全过程
- #展望我的2022Flag#Spring框架使用AspectJ实现AOP前置通知学习笔记
- 推荐学java——Spring之AOP