事务是什么?在MySQL中是怎么去开启,提交,回滚事务的?
- 事务是一组操作的集合,他是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功要么同时失败
- 开启:begin/start transaction
- 提交事务:commit
- 回滚事务:rollback
在Spring中怎么管理事务,用什么注解,在哪个层次使用可以有效管理事务?
- 注解:@Transactional
- 位置:业务(service)层的方法上,类上,接口上
- 作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务;
事务管理时规则:如果方法能够正常执行完自动提交事务,如果出现异常自动回滚事物。事务默认识别的异常是运行时异常,如果想要识别到编译时异常从而实现回滚,该怎么操作?
- 1.在@Transactional后面加上rollback=Exception.class
- 2.异常转换(使用方便,不至于事务失效)
事务的传播方式有哪些,含义是怎样
- 使用propagation属性可以配置事务传播行为
APO叫做什么?
- 将重复逻辑剥离出来,在不修改原始逻辑的基础上对原始功能进行增强
如果要完成一个AOP的入门案例,需要有哪些步骤?
- 1.pom.xml引入依赖
- 2.定义类抽取公共代码
- 3.标记当前类是一个AOP类,并被Spring容器管理
- 4.配置公共代码作用于哪些目标方法
- 5.执行目标方法
- 6.测试运行
AOP的概念理解:连接点,通知,切入点,切面 ?
- 连接点:JoinPoint,可以被AOP控制的方法执行
- 通知:Advice,重复逻辑代码
- 切入点:PointCut,匹配连接点的条件
- 切面:Aspect,通知+切点
通知有哪些类型?
- @Around:此注解标注的通知方法在目标方法前、后都被执行(需要自己调用 ProceedingJoinPoint.proceed() 来让目标方法执行,其他通知不需要考虑目标方法执行)
- @Before:此注解标注的通知方法在目标方法前被执行
- @After :此注解标注的通知方法在目标方法后被执行,无论是否有异常
- @AfterReturning : 此注解标注的通知方法在目标方法后被执行,有异常不会执行
- @AfterThrowing : 此注解标注的通知方法发生异常后执行
如果有不同切面的通知,增强相同的方法,执行顺序是怎样的?
当有多个切面的切点都匹配目标时,多个通知方法都会被执行:
- 如果还有下一个通知,则调用下一个通知
- 如果没有下一个通知,则调用目标
- 默认按照 bean 的名称字母排序
- 用
@Order(数字)
加在切面类上来控制顺序 - 目标前的通知方法:数字小先执行
- 目标后的通知方法:数字小后执行
切点表达式有几种,具体怎么定义?
三种
execution(返回值类型 包名.类名.方法名(参数类型))
*
可以通配任意返回值类型、包名、类名、方法名、或任意类型的一个参数..
可以通配任意层级的包、或任意类型、任意个数的参数@annotation()
根据注解匹配args()
根据方法参数匹配
如果有多个通知的切点表达式一样,怎么抽取?
@PointCut注解,该注解的作用是将公共切入点表达式抽取出来,需要的时候引用
连接点是什么可以获取哪些信息?
- 对于 @Around 通知,获取连接点信息只能使用
ProceedingJoinPoint
- 对于其他四种通知,获取连接点信息只能使用
JoinPoint
,它是 ProceedingJoinPoint 的父类型