Spring(@Transational---事务机制)

1.作用

@Transactional 注解的作用是标记一个方法或类需要进行事务管理。使用 @Transactional 注解的方法或类,在执行时会被 Spring 框架自动处理事务的提交和回滚。具体而言,@Transactional 注解的作用包括以下几个方面:

  1. 事务开启:被 @Transactional 注解标记的方法或类在执行时,会自动启动一个事务。这意味着在方法内部的数据库操作会被包含在一个事务中,保证了数据的一致性和完整性。

  2. 事务提交:方法执行成功(没有发生异常)时,事务会自动进行提交,将对数据库的修改永久保存。

  3. 事务回滚:当方法内部发生异常时,事务会被回滚,将之前对数据库的修改全部撤销,保证数据的一致性。回滚可以避免数据库数据被不完整或错误的修改。

  4. 事务管理:@Transactional 注解还可以设置事务的属性,如隔离级别、传播行为、只读属性等,用于控制事务的行为和范围。可以根据具体需求进行配置,以满足应用程序的事务管理需求。

总结而言,@Transactional 注解的作用是声明方法或类需要进行事务管理,它自动启动事务提交事务回滚事务,同时还提供了属性配置用于控制事务的行为和范围。使用 @Transactional 注解可以简化事务管理的操作,提高代码的可读性和可维护性。

2.原理

Spring中的@Transational注解是基于JDBC的事务来进行事务控制的,在spring中通过Aop获取事务管理对象生成代理对象(aop中的反射)之后,再对代理对象添加相应的事务管理代码,所有来自外部的请求(请求事务管理对象的请求)都会被代理对象拦截。这样就实现了对事务管理对象的事务管理。是动态代理设计模式的具体表现

3.容易导致注解失效的点

1.注解标记的方法或者类不是public权限,会导致注解失效

原因:因为注解是通过Aop实现的,而Aop的底层是通过反射机制来获取对象并生成代理对象的,所以当方法或者类的权限不是public,就无法获取对象。

2.只有外部的请求才会使得事务生效

原因:因为 Spring AOP 是基于代理对象的,在方法内部自我调用不会触发代理逻辑,因此事务管理也不会生效

3.方法内部捕获了异常事务机制失效

当在方法内部捕获了异常时,事务机制可能会失效。这是因为事务的回滚是由异常的传播机制触发的,如果在方法内部捕获了异常并进行了处理,那么异常就不会再继续传播,从而导致事务不会进行回滚。在默认情况下,Spring 的事务管理器会捕获并检查抛出的异常,根据异常的类型决定是否回滚事务。如果异常没有被捕获,或者被捕获后没有再次抛出,事务管理器会识别到异常,并触发事务的回滚。默认情况下,RuntimeException和Error的情况下,spring事务才会回滚。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值