学习笔记——SpringBoot事务管理+AOP

【day14 SpringBoot 事务管理+AOP】

1.事务是什么?在MySQL中是怎么去开启,提交,回滚事务的。

        在前面的SQL数据库中有学习过,事务是一组操作的集合,要么同时成功,要么同时失败。

        在MySQL中开启,提交和回滚分别是:

                                                        (1)开启:start transaction;   

                                                        (2)提交:commit; 

                                                        (3)回滚:rollback;

2.在Spring中怎么管理事务,用什么注解,在那个层次进行使用可以有效管理事务

        Spring中管理事务使用的是@Transactional注解,可以在类,接口,方法上定义,为了有效管理事务,我们一般放在控制成(service层)的方法上。

3.事务管理时规则:如果方法能够正常执行完自动提交事务,如果出现异常自动回滚事物。事务默认识别的异常是运行时异常,如果想要识别到编译时异常从而实现回滚,该怎么操作?

        默认识别的是运行时异常,如果要识别编译时异常。有两种方法。

        第一种,先将编译时异常使用try....catch  抓住异常,然后再catch里面new一个运行时异常,然后再抛出。

        第二种,在@Transactional注解里面,将rollback属性赋值Exception.class。

@Transactional(rollback=Exception.class)

4.事务的传播方式有哪些,含义是怎样?

        传播方式有好几种,目前最关注的有两种,一个是REQUIRED以及 REQUERES_NEW

        REQUIRED是默认的传播方式,当有事物时,会加入事务,没有事务时会创建新事物。REQUERES_NEW,不管有没有事务都会创建新事物。

5.AOP叫做什么,有什么作用?举一个5岁孩子就能理解的例子?

        AOP叫做面向切面编程,核心思想时将重复的逻辑剥离出来,在不修改源代码的基础上,对原始功能进行增强。

        例子:小明的妈妈每天都要做饭,做饭需要买菜,洗菜,切菜,炒菜,最后吃完了还要洗碗。但是小明妈妈每天需要上班没时间去买菜,但是小明奶奶有时间,小明奶奶出去买菜,买完菜后顺便把菜洗好,小明爸爸看小明妈妈每天都很辛苦,就说吃完饭自己洗完。这样小明妈妈,就只需要切菜炒菜就可以了。剩下的,都由小明奶奶和小明爸爸做了。这就是AOP的作用,将本来复杂繁琐的是交给其他人代劳,自己做核心的事情就可以了。本来小明妈妈一个人要完成全部的事情,现在只要切菜和炒菜就可以了,不仅降低了劳动强度,还提高了做事的效率。

6.如果要完成一个AOP的入门案例,需要有哪些步骤?

        (1)在pom.xml引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

        (2)定义一个类,用于抽取公共代码,并且要有注解@Aspect,用于标识当前类是一个AOP类,在加个注解@Component,让他被Spring容器管理。

        (3)再在定义的类上加上一个注解,用于表名配置的公共代码作用于那些目标方法。这里用的注解是@Around,表示环绕通知,在目标方法执行前后执行一些公共代码。

        (4)执行测试。

7.AOP的概念理解:连接点,通知,切入点,切面 ?

        连接点(JoinPoint):可以被AOP控制的执行方法

        通知(Advice):重复的逻辑代码

        切入点(PointCut):匹配连接点的条件。

        切面(Aspect):整个类(通知+切入点)

8.通知有哪些类型?

        有五种类型。

        (1)@Around  :循环通知,标注的通知方法在目标方法执行前后执行。

        (2)@Before:标注的通知方法在目标方法执行前执行。

        (3)@After:标注的通知方法在目标方法执行后执行。无论是否有异常。

        (4)@AfterReturning:标注的通知方法在目标方法执行后执行,有异常则不执行。

        (5)@AfterThrowing:标注的通知方法发生异常后执行。

9.如果有不同切面的通知,增强相同的方法,执行顺序是怎样的?

        (1)默认情况是按照字母的排序进行的,通知方法在目标方法前执行的,按字母排序,排在前面的先执行,后面的后执行。通知方法在目标方法后执行执行的按字母排序,在后面的先执行,前面的后执行。

        (2)有@Order(数字) 加在切面类上排序的,通知方法在目标方法前执行的,数字小的先执行,通知方法在目标方法后的,数字小的后执行。

10.切点表达式有几种,具体怎么定义?

        有两种。第一种execution,放在通知标注的小括号里面。带问号的可以省略。

execution(访问修饰符?  返回值  包名.类名?.方法名(方法参数) throws 异常?)

        第二种,使用@annotation。定义一个类是选择Annotation,之后再用@annotation(定义的Annotation全限定名),和execution一样放在通知标注的小括号里面

11.如果有多个通知的切点表达式一样,怎么抽取?

        使用@PointCut抽取相容的部分,示例如下:

  @Pointcut("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))")
    public void pt(){}

    @Around("pt()")
    public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable {
        
    }

12.连接点是什么可以获取哪些信息?

        连接点理解为目标方法抽象后封装在了连接点里,通过连接点可以得到方法执行时的相关信息,比如方法名,方法实际参数,类型等。

        其中@Around通知想要获得连接点的信息智能使用ProceedingJoinPoint,其他四种只能使用JoinPoint。ProceedingJoinPoint是JoinPoint的子类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值