@Transactional注解个人总结
@Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。
默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰。
个人总结:@Transactional就是将整个方法里面的逻辑全部纳入事务内,除非调用了外部接口也有开启事务的方法,不然作为在同一个事务里面。
下面将以具体的事例来佐证:
@Override@Transactionalpublic void test1() {eventLogService.addEventLog("1", "1", "1");test2();test4();test5();test();}@Override@Transactional(propagation=Propagation.REQUIRES_NEW, rollbackFor = Exception.class)public void test2() {eventLogService.addEventLog("3", "3", "3");}@Overridepublic void test5() {eventLogService.addEventLog("3", "3", "3");}private void test() {eventLogService.addEventLog("2", "2", "2");throw new CouponException("2000", "xiaoxiao");}public void test4() {eventLogService.addEventLog("4", "4", "4");} public void addEventLog(String a1, String a2, String a3) {insert();}
运行结果显示,test()函数发生了异常,其他函数实际未在数据库中添加数据,从而可以证实上述黑体字的结论,如果有什么纰漏,望请指正
@Transactional注解个人总结相关推荐
- @Transactional注解最容易忽视的三个失效场景!
@Transactional注解在以下场景中使用,是会失效的,切记! 1.非public方法 spring对注解事务的方法进行校验,修饰符是不是public,不是 public则不会获取@Transa ...
- @aspect注解类不生效_springboot:@Transactional注解 VS @Service注解
1. Transactional注解与Service/Component注解冲突? 之前遇到一个神奇的事情--用Transactional注解的方法,数据处理了一半,后面的数据处理抛出异常后,没有回滚 ...
- 一口气说出 6 种 @Transactional 注解的失效场景
一.事务 事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种. 编程式事务:是指在代码中手动的管理事务的提交.回滚等操作,代码侵入性比较强, ...
- spring@Transactional注解事务不回滚不起作用无效的问题处理
这几天在项目里面发现我使用@Transactional注解事务之后,抛了异常居然不回滚.后来终于找到了原因. 如果你也出现了这种情况,可以从下面开始排查. 一.特性 先来了解一下@Transactio ...
- @Transactional注解在什么情况下失效?
引言 1.@Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功.要么同时失败. 2.使用@Transactional注解时需要注意许 ...
- 为什么加了@Transactional注解,事务没有回滚?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 在前天的<事务管理入门>一文发布之后,有读者 ...
- java事务不生效场景_springboot中使用@Transactional注解事物不生效的坑
一:在springboot中使用事物遇到的坑 1.我们知道spring中的事物分为两种:一种是编程式事物,一种是声明式事物.顾名思义,编程式事物是指通过代码去实现事物管理,这里不做过多说明.另一种是声 ...
- spring的@Transactional注解详细用法
概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性. Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型 ...
- @getmapping注解的作用_一口气说出6种,@Transactional注解的失效场景
作者:程序员内点事 引言 昨天公众号粉丝咨询了一个问题,说自己之前面试被问@Transactional注解哪些场景下会失效,一时语塞致使面试失败.所以今天简单的和大家分享一下@Transactiona ...
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一致性. spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或 ...
最新文章
- android md日期选择器,移动端日期选择
- ES6中定义的类和对象
- 读取SD卡里面的BMP文件 显示到TFT上
- 一个sqlserver数据库表查看与备份软件
- Domain Driven Design and Development In Practice--转载
- 交际中你所不知道的说话的12个技巧!
- 如何在Instagram上过滤冒犯性评论
- 新的编程语言研发契机思考
- python 字典查询比列表快_Python 字典和列表的对比应用
- Postman脚本发送请求pm.sendRequest
- CentOS 7 使用源代码编译并安装软件
- sql如何避免插入并发_SQL批量插入并发和性能注意事项
- 200 万年薪的博士,华为到底看重什么?
- 微分方程的数值解法与程序实现 pdf_数值计算方法·第三部分
- Neo4j下载和安装
- 如何旋转PDF页面并保存
- 控制反转和依赖注入的理解(通俗易懂)
- 分享一个编程学习网站——并发编程网
- 商业智能BI财务分析,如何从财务指标定位到业务问题
- 毫米和像素怎么换算_C#中毫米与像素的换算方法