Spring中Transactional注解使用的心得(推荐)

 更新时间:2022年10月21日 08:34:26   作者:pzistart  
这篇文章主要介绍了Spring中Transactional注解使用的心得,事务是用来控制数据的ACID特性的,用于保证数据的正确性和完整性,需要的朋友可以参考下

事务特性

@Transactional注解是用于事务控制的,需要知道事务的ACID特征:即原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

事务是用来控制数据的ACID特性的,用于保证数据的正确性和完整性。

@Transactional注解有两种使用方式:

(1)标注在类上面:当作用于类上时,该类的所有public方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。

(2)标注在方法上面:当作用于方法上时,只有当该方法发生了异常才会进行回滚,其他的方法不受影响。

在项目中使用,@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚。

今天看黑马redis的课,里面讲到了一个事务注解不生效的问题。

究其原因,就在于Spring中事务注解生效的条件。那么接下来就说一下自己的心得。

  • 查了一下资料,就是说如果想让@Transactional注解生效,那么就只有当被代理类对象调用它的事务方法时,事务注解才会起作用。
  • 那如何才能创建代理对象呢,这个Spring也帮我们做好了。
  • 只要使用注入bean的方式(也就是依赖注入的方式)去创建bean对象,该bean对象调用被@T注解了的方法,那么就会走代理类,从而@T注解就起作用了。

以下说一下例子吧

public class VoucherOrderServiceImpl implements IVoucherOrderService
    @Override
    public Result seckillVocher(Long voucherId) {
	IVoucherOrderService o = (IVoucherOrderService) AopContext.currentProxy();
        return o.secKill(voucherId);
	}


    @Override
    @Transactional
    public Result secKill(Long voucherId) {
	
	}
}
  • 在一个方法中调用另一个@T注释的方法,如果直接this.xxx()去调用,那么@T不会生效,上面说的原因嘛,没有走动态代理类。
  • 那怎么办呢,我们手动的创建一个代理类对象就能解决改问题。
  • 为什么要生成IVoucherOrderService这个类型的动态代理类对象呢?
    -- 这样想:1.我们要去调用该类的@T方法,肯定要指定成该对象类型。2.换个说法,如果使用注入bean的方式调用该@T方法,不也是生成这个类型的代理类对象吗

到此这篇关于Spring中Transactional注解使用的心得的文章就介绍到这了,更多相关Spring Transactional注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring整合Quartz分布式调度的示例代码

    Spring整合Quartz分布式调度的示例代码

    本篇文章主要介绍了Spring整合Quartz分布式调度的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Java如何构造DSL方法重构

    Java如何构造DSL方法重构

    这篇文章主要介绍了Java如何构造DSL方法重构,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考价值
    2022-07-07
  • java+sqlserver实现学生信息管理系统

    java+sqlserver实现学生信息管理系统

    这篇文章主要介绍了利用java和sqlserver实现学生信息管理系统,违章内容主要建立了与sqlserver数据库的连接开始展开内容,能学到了解JDBC执行SQL的语法,需要的朋友可以参考一下
    2021-12-12
  • java 8如何自定义收集器(collector)详解

    java 8如何自定义收集器(collector)详解

    这篇文章主要给大家介绍了关于java 8如何自定义收集器(collector)的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • Java实现每日给女友微信发送早安信息

    Java实现每日给女友微信发送早安信息

    这篇文章主要为大家详细介绍了Java如何实现每日给女友微信发送早安等微信信息,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以了解一下
    2022-12-12
  • java数据结构和算法之马踏棋盘算法

    java数据结构和算法之马踏棋盘算法

    这篇文章主要为大家详细介绍了java数据结构和算法之马踏棋盘算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • SpringMVC 重新定向redirect请求中携带数据方式

    SpringMVC 重新定向redirect请求中携带数据方式

    这篇文章主要介绍了SpringMVC 重新定向redirect请求中携带数据方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • IO中flush()函数的使用代码示例

    IO中flush()函数的使用代码示例

    这篇文章主要介绍了IO中flush()函数的使用代码示例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 简介Java程序的Shell脚本包装

    简介Java程序的Shell脚本包装

    这篇文章主要介绍了简介Java程序的Shell脚本包装,将Java运用于脚本程序当中,有时或许是个不错的主意~需要的朋友可以参考下
    2015-07-07
  • Springboot打包成jar发布的操作方法

    Springboot打包成jar发布的操作方法

    打包的方式有打包成jar包或者打包成war包发布,区别在于jar包内置了tomcat、netty等服务器,更改只需要修改pom.xml的坐标即可,war不内置服务器,需要上传到服务器tomcat解压后运行,本文分析Springboot打包成jar发布,感兴趣的朋友一起看看吧
    2023-02-02

最新评论