源码剖析@Transactional注解

PS:本人从事JavaWeb行业不足3年的理解,也是人生中的第一篇技术文章,简单说一下自己对于该注解的理解,不足处希望大佬们指点

想必大家对于@Transactional注解都不陌生,我们通常使用的时候不知道他在后面默默付出了些什么,接下来我们一起走进@Transactional

目录 

@Transactional的作用

@Transactional注解中的参数

@Transactional注解的实现


1.@Transactional的作用

@Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。

2.@Transactional注解中的参数

我们戳进@Transactional里面会看到

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {

    //可选的限定描述符,指定使用的事务管理器
    String value() default "";
    
    //可选的事务传播行为,具体看Propagation中定义的属性
    Propagation propagation() default Propagation.REQUIRED;

    //可选的事务隔离级别
    Isolation isolation() default Isolation.DEFAULT;

    //事务超时时间设置
    int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;

    //读写或只读事务,默认读写
    boolean readOnly() default false;

    //导致事务回滚的异常类数组,
    //注意项:即使自定义异常,也必须继承自Throwable
    Class<? extends Throwable>[] rollbackFor() default {};
    
    //导致事务回滚的异常类名字数组
    //类名数组,必须继承自Throwable
    String[] rollbackForClassName() default {};

    //不会导致事务回滚的异常类数组
    //Class对象数组,必须继承自Throwable
    Class<? extends Throwable>[] noRollbackFor() default {};

    //不会导致事务回滚的异常类名字数组
    //类名数组,必须继承自Throwable
    String[] noRollbackForClassName() default {};

}

顺带提一下事物的4个特性

1.原子性:对数据进行操作的时候,要么全都执行,要么全都不执行。

2.一致性:和原子性是分不开的,事务执行成功,说明全部都执行了,那么就使数据库从一个一致性状态变到另一个一致性状了。

3.隔离性: 一个事务的执行不能被其他事务干扰

4.持续性: 事务一旦提交成功,那么数据库里的数据就会永久性的改变。

事物特性参考源处:https://www.jianshu.com/p/bcfd48c4cbf4

3.@Transactional注解的实现

由上面看到的属性及注释我们进注解的实现源码看一下吧 

 3.1 @Transactional核心配置

在上图我们能看到这些,其中核心配置的是AnnotationTransactionAttributeSource(注解事物属性配置)这个类。我们能看到该类继承了抽象类AbstractFallbackTransactionAttributeSource,这个类实现 TransactionAttributeSource接口,重写了getTransactionAttribute方法,我们来看看这个方法实现了什么,附上官方源码及注释


                
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值