一.事务
1.事务介绍
事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所以的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
2.事务的操作
start transaction /begin; 开启事务
commit; 提交事务
rollback; 回滚事务
3.事务的四大特性
原子性:事务时不可分割的最小单元,要么全部成功,要么全部失败
一致性:事务完成时,必须使所以数据都保持一致状态
隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
4.注解:
注解:@Transactional,
(rollbackFor属性用于控制出现何种异常类型,回滚事务)
(propagation属性为事务传播行为,指的是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制)
位置:业务(service)层的方法上,类上,接口上
作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务
二.AOP
AOP基础
1.介绍:
Aspect Oriented Programming(面向切面编程,面向方面编程),其实就是面向特定方法编程
2.实现
动态代理是面向切面编程最主流的实现。而SpringAOP是Spring框架的高级技术,指在管理bean对象的过程中,主要通过底层的动态代理机制,对特定的方法进行编程。
3.场景
记录操作日志(重要) 权限控制 事务管理
4.优势
代码无侵入 减少重复代码 提高开发效率 维护方便
5.AOP核心概念
连接点:JoinPoint,可以被AOP控制的方法(暗含方法执行时的相关信息)
通知:Advice,指哪些重复的逻辑,也就是共性功能(最终体现为一个方法)
切入点:PointCut,匹配连接点的条件,通知仅会在切入点方法执行时被应用
切面:Aspect,描述通知与切入点的对应关系(通知+切入点)
目标对象:Target,通知所应用的对象
AOP进阶
1.通知类型
@Around:环绕通知,此注解标注的通知方法在目标方法前,后都被执行
@Before:前置通知,此注解标注的通知方法在目标方法前被执行
@After:后置方法,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行
@AfterReturning:返回后通知,此注解标注的通知方法在目标方法后被执行,有异常不会执行
@AfterThrowing:异常后通知,此注解标注的通知方法发生异常后执行
@Pointcut:将公共的切入点表达式抽取出来
注意事项:
@Around环绕通知需自己调用 ProceedingJointPoint.proceed() 来让原始方法执行,其他通知不需要考虑目标方法执行
@Around环绕通知方法的返回值,必须指定和原始方法一样的返回值
2.执行顺序
不同切面类中,默认按照切面类的类名字母排序:
目标方法前的通知方法:字母靠前的先执行
目标方法后的通知方法:字母靠前的后执行
用@Order加切面类上控制顺序:
目标方法前的通知方法:数字小的先执行
目标方法后的通知方法:数字小的后执行
3.切入点表达式
1.execution
execution 主要根据方法的返回值,包名,类名,方法名,方法参数等信息来匹配,语法为:
execution(访问修饰符?返回值 包名.类名.?方法名(方法参数)throws 异常?)【带?可省略】
2.@annotation
4.连接点
在Spring中用JoinPoint抽象了连接点,用它可以获得方法执行时的相关信息,如目标类名,方法名,方法参数等
对于@Around通知,获得连接点信息只能使用 ProceddingJoinPoint
对于其他四种通知,获取连接点信息只能使用JointPoint,他是ProceddingJoinPoint的父类型