一、事务管理
1.事务回顾
2.Spring事务管理
删除部门和删除部门下的员工应该绑定在一起,但是如果这两个操作之间出现错误,就会执行删除部门不删除员工,所以需要使用事务将两个任务绑定在一起,要么一起成功要么一起失败
Spring中如何使用事务:
注解可以加在方法、类、接口上,但是在项目中经常加在多次数据访问增删改的方法上
3.事务进阶
①rollbackFor
这样配置rollbackFor就可以所有异常都回滚
②propagation
在解散部门方法是使用事务,在解散部门方法中要有个方法记录操作日志,也是使用了事务,但是这个方法无论解散部门方法是否执行成功都要执行。
如果是REQUIRED就会加入之前方法的事务中,但是如果之前的事务出现错误回滚了,后面的方法也会回滚,就算放在try-finally中也会回滚
设置为REQUIRES_NEW会给后面的方法设置新的事物。
二、AOP-基础
1.AOP概述
就是要对特定方法执行相同的操作,进行模板程序,基于动态代理
2.AOP快速入门
编辑AOP程序
编写AOP程序要交给IOC容器进行管理,加上@Aspect注解就是AOP程序
在@Around中就是代表哪些方法需要进行编程
3.AOP核心概念
AOP执行流程:
在程序运行的时候会自动为目标对象创建一个代理对象,在这个对象中就会对目标对象中的方法进行增强,就会将AOP程序中绿色部分和目标对象的红色方法原始程序结合在一起,在程序运行的时候就不注入目标对象注入的是代理对象,运用的方法是代理对象的方法。
三、AOP-进阶
1.通知类型
如果切入点表达式很多都一样,有不同类型的通知类型的方法,可以对切入点表达式进行抽取
使用@Pointcut注解
只要把这个方法设置成public就可以在其他类中的AOP程序中引用这个切点表达式
2.通知顺序
可以通过加注解来改变顺序
3.切入点表达式
①execution表达式
包名类名不建议省略
execution通配符:
第一个*代表任意返回值,第二个*代表第二级任意包,第三个*代表该包下任意接口或类,第四个*代表任意方法中方法名中以update开头的方法,第五个*代表任意类型的有且仅有的一个参数。
第一个..代表任意层级的包,第二个..代表任意个数的参数
②annotation表达式
创建一个自己的注解,加在所需要的切入点上
4.连接点
在Around通知中就需要ProceedingJoinPoint
对于其他四种通知只能使用JoinPoint
四、AOP案例
通过AOP方法中传入的ProceedingJoinPoint对象就可以获取连接点的信息,通过注入的HttpServletRequest对象获取JWT令牌中的信息,知道当前操作对象,并封装到operatorLog对象中。然后调用mapper层中insert向日志表中添加数据。
切面类: