Spring中的@Transactional的工作原理

网友投稿 561 2022-10-01

Spring中的@Transactional的工作原理

Spring中的@Transactional的工作原理

目录1、原理2、用法3、拓展

1、原理

事务的概念想必大家都很清楚,其ACID特性在开发过程中占有重要的地位。同时在并发过程中会出现一些一致性问题,为了解决一致性问题,也出现了四种隔离级别,这里就不再详述了,感兴趣的可以去查一下。下面我们讨论一下Spring中的事务。

Spring中的事务有两种:

编程式事务声明式事务

通常情况下我们使用声明式事务,它是基于SpringAOP实现的。基于AOP实现的事务极大得帮助了我们的开发效率,其本质是对方法进行前后拦截,在目标方法前加入一个事务,在目标完成后再加入一个事务进行提交或者回滚,这种方式下我们并不需要在目标方法中的代码中掺杂事务管理代码,轻松进行事务管理。

而编程式事务就需要我们修改代码来进行事务管理。这种方法看似很麻烦,但是它的存在自有它的道理,上面我们讲到的声明式事务控制,其控制的细粒度只能作用到方法上,无法在代码块中实现声明式事务控制。我们都知道,一旦加上事务,程序的运行效率就会降低,所以编程式事务也有它的用武之地。

但是我们的广大劳动人民也是智慧的。直接将需要事务的代码块独立成方法,这样仍然可以使用声明式事务。当然在开发中具体情况要具体分析了。

2、用法

事务的传播行为:

事务的隔离级别:

@Transactional属性

示例代码:

@Service

@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)

public class RoleServiceImpl implements RoleService {

@Autowired

private RoleDao roleDao;

@Transactional(propagation = Propagation.SUPPORTS,readOnlyKHLaRvSNl = true)

@Override

public List findAllRolesKHLaRvSNl() {

return roleDao.selectAllRoles();

}

}

3、拓展

1、为什么声明式事务只能应用于方法上?

因为声明式事务是基于AOP实现的,AOP是基于动态代理实现的。动态代理只会捕捉来自外部的方法调用,意思就是类内部的方法调用类内部的另外方法,并不会发生事务行为。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用小程序写一个弹窗输入组件(小程序弹窗怎么写)
下一篇:[leetcode] 714. Best Time to Buy and Sell Stock with Transaction Fee
相关文章

 发表评论

暂时没有评论,来抢沙发吧~