SpringAop和事务(简单理解)

Aop介绍

面向切面编程,可以在不修改源码的情况下增强功能,可以减少代码的重复性,提高开发的效率,让程序更加容易便于维护

1.Aop的动态代理技术

JDK代理:基于接口的动态代理技术

cglib代理:基于父类的动态代理技术

动态代理技术

2.Aop相关的术语

Target(目标对象):被代理的对象。

Proxy(代理对象):负责代理目标对象。

Joinpoint(连接点):可以被增强的目标方法。

Pointcut(切入点 / 切点):对选定的连接点进行增强

Advice(通知 / 增强):具体增强的代码

Aspect(切面):切入点 + 通知

Weaving(织入):切入点和通知结合的过程

3.切点表达式

execution([修饰符]返回值类型包名.类名.方法名(参数))

4.通知的类型

4.1注解方式

前置通知:@Before(增强方法在切入点方法执行之前执行)

后置通知:@AfterReturning(增强方法在切入点方法执行之后执行)

环绕通知:@Around(增强方法在切入点方法执行之前和执行之后都执行)

异常抛出通知:@AfterThrowing(增强方法在切入点方法执行出现异常时执行)

最终通知:@After(增强方法在切入点方法执行是否有异常都执行)

4.2XML标签方式

前置通知:<aop:before>(增强方法在切入点方法执行之前执行)

后置通知:<aop:AfterReturning>(增强方法在切入点方法执行之后执行)

环绕通知:<aop:Around>(增强方法在切入点方法执行之前和执行之后都执行)

异常抛出通知:<aop:AfterThrowing>(增强方法在切入点方法执行出现异常时执行)

最终通知:<aop:After>(增强方法在切入点方法执行是否有异常都执行)

用注解方式实现Aop(例子)

创建切面类

将目标类和切面类的对象创建权交给spring,并在配置文件中开启组件扫描和AOP的自动代理

事务

1.事务的基本特性

1.原子性(Atomicity):一个事务已经是一个不可再分割的工作单位。事务中的全部操作要么都做;要么都不做

2.一致性(Consistency):事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。

3.隔离性(Isolation):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。

4.持久性(Durability):一个事务一旦提交,它对数据库中数据的改变会永久存储起来。其他操作不会对它产生影响。

2.事务的隔离等级

1.脏读 :在一个事务中读取到了另外一个事务修改的【未提交的数据】,而导致多次读取同一个数据返回的结果不一致 (必须要解决的)

2.不可重复读 : 在一个事务中读取到了另外一个事务修改的【已提交的数据】,而导致多次读取同一个数据返回的结果不一致

3.幻读(虚读): 一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录

3.Spring中的事务隔离级别

1.ISOLATION_DEFAULT(默认):默认的隔离级别

2.ISOLATION_READ_UNCOMMITTED(读未提交):一个事务可以读取另一个事务没有提交的数据,会出现脏读,幻读,不可重复读

3.ISOLATION_READ_COMMITTED(读已提交):一个事务可以读取另一个事务提交的数据,如果另一个事务数据没有提交,则不能读未提交的数据,会出现幻读,不可重复读

4.ISOLATION_REPEATABLE_READ(可重复读):一个事务可以读取另外一个事务已经提交的数据,会出现幻读

5.ISOLATION_SERIALIZABLE(序列化):可以避免出现脏读,幻读,不可重复读。

4.事务传播行为

1.REQUIRED(默认属性):如果存在一个事务 那么支持当前事务,如果不存在事务,则新建一个事务。

2.SUPPORTS:如果当前存在事务,则执行当前事务,.如果不存在事务,就不会用事务

3.MANDATORY:如果当前存在事务,则执行当前事务,如果不存在事务,则抛出异常

4.REQUIRES_NEW:新建事务,如果当前存在事务,则挂起当前事务

5.NOT_SUPPORTED:以非事务方式执行操作,如果存在事务,则挂起当前事务

6.NEVER:以非事务方式执行,如果当前存在事务,则抛出异常

7.NESTED:当前有事务,则在嵌套事务中执行。如果没有,那么执行情况与REQUIRED一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值