spring(七)AOP,事务的隔离级别、传播特性、配置

本文介绍了Spring中的AOP概念,包括切面、连接点、通知和切点,强调了AOP在简化业务逻辑上的作用。接着讨论了事务的四种隔离级别及其可能导致的问题,以及Spring中的六种事务传播特性。最后提到了Spring配置事务的方法,包括通过XML配置和使用@Transactional注解的方式。
摘要由CSDN通过智能技术生成

AOP概念

Aop即面向切面编程、面向核心的业务方法编程,非核心交给spring去做,在模块中占的比重非常少,主要体现是用在事务管理上。
1. 切面(Aspect):面向切面的“面”就是指的是本类,在类中面的组成就是方法的集合,JAVABean对应切面。
2. 连接点(JoinPoint)程序运行过程中的某个阶段点。如某个方法调用,或者某个异常被抛出。
3. 通知(Advice):处理逻辑,方法体中的业务逻辑,某个方法里面的具体逻辑。
4. 切点(PointCut)一系列连接点的集合,它指明处理方式(Advice)将在何时被触发,就是方法的集合。
结论:程序员只是关注最主要的业务逻辑或者方法。

为什么需要AOP

面向切面编程能使程序员只是关注最主要的业务逻辑或者方法,其余与业务无关的方法交个第三方面来做,腾出大量的时间使程序员关注最核心的业务方法,节省时间提高开发效率,是spring在面向对象的思想上新提出的一种编程思想。

事务的隔离级别

Isolation.READ_UNCOMMITTED:读取未提交数据(会脏读和不可重复读)基本不用。
Isolation.READ_COMMITTED:读已提交数据(不可重复读和幻读)oracle数据库默认。
Isolation.REPETABLE_READ:可重复读(幻读)。Mysql和SQL server默认。
Isolation_SERIALIZABLE:串行化,最严格的级别,事务串行执行,资源消耗最大。
脏读:一个事务读取到另一个事务的未提交的数据,包含已提交的和未提交的,另一个事务回滚后数据又不见了。也就是说,比如事务A的未提交(还依然缓存)的数据被事务B读走,如果事务A失败回滚,会导致事务B所读取的的数据是错误的。
不可重复读:在同一事务中多次读取同一数据返回的结果有所不同,你在读的时候其它人在修改。比如事务A中两处读取数据-total-的值。在第一读的时候,total是100,然后事务B就把total的数据改成 200,事务A再读一次,结果就发现,total竟然就变成200了,造成事务A数据混乱。相反,可重复多次读取数据时能够保证读取数据一样,也就是后续读取不能读取另一个事务已提交的更新数据。
幻读:一个事务读到另一个事务已提交的insert数据。这个和不可重复读相似,也是同一个事务中多次读不一致的问题。但是不可重复读的不一致是因为他所要取的数据集被改变了(比如total的数据),但是幻读所要读的数据的不一致却不是他所要读的数据集改变,而是他的条件数据集改变。比如Select account.id where account.name=”ppgogo*”,第一次读去了6个符合条件的id,第二次读取的时候,由于事务b把一个帐号的名字由”dd”改成”ppgogo1”,结果取出来了7个数据。

事务传播特性

在spring中基本的六种事务传播(事务常量):
1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启。
2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。
3. PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
4. PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
5. PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。
6. PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常。

spring配置事务

不配置也可进行操作,因为默认情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值