-
事务是什么?在MySQL中是怎么去开启,提交,回滚事务的。
事务:一组操作的集合,要么同时成功,要么同时失败。
MySQL:start transection/Begin 开启 commit 提交 rollback 回滚
-
在Spring中怎么管理事务,用什么注解,在那个层次进行使用可以有效管理事务
使用:@Transactional 注解
在(业务层) Service 层的类上、方法上、接口上
-
事务管理时规则:如果方法能够正常执行完自动提交事务,如果出现异常自动回滚事物。事务默认识别的异常是运行时异常,如果想要识别到编译时异常从而实现回滚,该怎么操作?
两种方案:
方案一:将异常抛出,并在@Transactional中指定异常rollbaceFor=Exception.class
需要一层一层抛出,所以一般使用方案二
方案二:使用【try...catch】将异常捕获,将编译时异常转变为运行时异常抛出
(Throw new RuntimeException(e))将e编译时异常转变为运行时异常
-
事务的传播方式有哪些,含义是怎样?
REQUERED:(默认值)需要事务,有则加入,无则创建新事务
REQUERES_NOW: 需要新事务,无论有无,都会创建新事务
-
AOP叫做什么,有什么作用?举一个5岁孩子就能理解的例子?
AOP:面向切面编程
作用:将重复的逻辑抽离出来,在不修改原始逻辑的基础上对原始功能进行增强
-
如果要完成一个AOP的入门案例,需要有哪些步骤?
1.导入起步依赖
2.定义一个新的类,将公共代码抽离。
3.标识当前类是一个AOP类(@Aspect),并被Spring容器管理(@Component)。
4.配置公共代码作用于哪些方法
5.执行目标方法
-
AOP的概念理解:连接点,通知,切入点,切面 ?
连接点:JoinPoint,可以被AOP控制方法的执行(包含方法信息)
通知:Advice,重复的代码逻辑
切入点:PointCut,匹配连接的条件
切面:Aspect,通知加切点(整个类)
-
通知有哪些类型?
@Around:此注解标注通知方法在目标方法前、后都会被执行;
@Before:此注解标注通知方法在目标方法前执行;
@After:此注解标注通知方法在目标方法后执行,无论是否有异常;
@AfterReturning:此注解标注通知方法在目标方法后被执行,有异常不执行;
@AfterThrowing:此注解标注通知方法发生异常时执行
-
如果有不同切面的通知,增强相同的方法,执行顺序是怎样的?
有两种方案:
方案一:默认按照切面类名称首字母排序
目标前的通知方法:首字母靠前的先执行
目标后的通知方法:首字母靠前的后执行
方案二:用@Order(数字)加在切面类上来自定义控制顺序
目标前的通知方法:数字小的的先执行
目标后的通知方法:数字小的的后执行
-
切点表达式有几种,具体怎么定义?
有两种
第一种:execution主要根据方法的返回值、包名、类名、方法名、方法参数等信息来匹配
语法为:execution(访问修饰符?返回值(后需加个空格) 包名、类名?.方法名(方法参数)throws异常?)
其中带问号的可以省略不写,但是省略的话不能准确确定是哪一个方法,会很消耗性能,建议:不省略
-
第二种:@annotation切点表达式也支持匹配目标方法是否有注解。
-
如果有多个通知的切点表达式一样,怎么抽取?
使用@PointCut把公共切点表达式的部分抽离出来,需要用到切点表达式时直接引用该切点表达式就可以
-
连接点是什么可以获取哪些信息?
简单理解就是目标方法;在Spring中JoinPoint抽象了连接点,用它可以获得方法执行时的相关信息,
比如:方法名,方法参数类型,方法实际参数等等
对于@Aount通知,获取连接点信息只能用ProceedingJoinPoint
对于其他四种通知,获取连接点信息只能用JoinPoint,它是 ProceedingJoinPoint 的父类。
【day14 SpringBoot 事务管理+AOP】
于 2023-08-07 21:45:52 首次发布