00:00
好,那我们基于注解的这个声明式事物呢,咱们就讲完了,大家注意,其实我们平常咱们在用的时候没有这么麻烦啊,说每一个属性你都得去设置出来嘛,不需要我们平常咱们在用的时候就是在配置文件里面啊,然后去加上一个标签,开启事物的注解驱动,然后呢,在我们需要被事物管理的方法上,直接加it transactional就可以了,知道吧,这样的啊好,那我们下面咱们再来看一下基于叉L的声明是事物啊,然后呢,我们在这,咱们其实要想实现的话,很简单啊,我们只要把咱们通过注解来实现的声明式事物的这些注解啊给它删掉就行,或者说咱们在这直接把它给注释掉。好,然后再来找到咱们的checkout service m PL,其实咱们用的注解就只有这一个it transa OK吧,那行,那下面呢,我们把配置文件复制一份,然后这个叫做TX杠叉ML,然后呢,这里面大家看好,这上面这些东西咱们都不需要去改啊,包括事务管理器也不需要,然后只不过就是下面这个咱们开启事物的注解驱动,大家注意这个咱们就不要了,因为咱们说过这个东西是干什么的,这个东西啊,它就是就是将我们当前咱们的事物切面的这个通知呀,然后通过咱们的这个注解,然后来定位到咱们的连接点上,谁是连接点,你的注解加到了哪个方法上,或者说咱们的注解加到了哪个类上,这个类中所有的方法它都是连接点。
01:30
OK吧,但是我们现在呢,咱们不用注解了,那这个标签咱们也不用了,那我们下面咱们就可以通过我们的叉L的方式来配置,首先呢,大家注意,那大家说我们现在要干什么?这不是咱们的切面吗?对吧?这里面不是通知吗?那我们现在是不是只需要把我们当前的切面中的通知,然后来定位到咱们的连接点就行,那我们基于注解的这个声明式事物的话,咱们是通过这个it transaction去标识一个方法或标识一个类来找到连接点的,而我们现在呢,既然咱们要用叉L,那咱们是不是就得通过叉L来配置了,对吧,怎么写看好啊,TX。
02:11
TX命名空间中的标签,然后咱们需要用到一个叫做advice啊advice大家注意这个东西是用来设置什么呢?这个是用来配置咱们的事务通知的,来配置事务通知。什么叫做事物通知啊,大家看好了这个东西,它是不是说就直接把我们当前咱们的这个啊通知呢,作用到了咱们的连接点上呢?大家注意不是,因为我们这里面咱们主要来设置的是事物的一些细节问题,就比如说我们在针对于我们的连接点的时候,咱们的哪些方法需要来设置什么样的事物属性,这个事物通知主要是这样的一个作用啊,来配置咱们的事物的一些,来配置咱们的事物的一些这个细节问题的,也就是配置事物的属性的啊好,大家来看,你看这里面它都有什么属性,首先第一个叫做ID,然后这是干嘛的,大家注意,这是来设置我们当前咱们的这个事务通知的一个唯一标识的,比如说我在这就叫做T,就叫做TX行,咱们就叫TX啊好,然后在这有个TRANS3MANAGER对吧,Trans manager干啥的,跟我们刚才的开启事物的注解驱动里面的这个属性一样,因为。
03:26
我们现在要实现事务管理,那我们是必须要借用我们当前的事物管理器来实现,因为咱们的这里面,这个里面才是写的什么呀,写的才事我们当前咱们该如何去处理事物,OK吧,所以说咱们在这来引用一下,引用完之后呢,然后大家注意,我们就可以将我们当前的事物通事物管理器,然后通过我们当前咱们的切入点表达式来定位到连接点了。好,下面大家再来看,还记不记得咱们之前写过AOP标签,然后咱们学过一个AOP冒号conve对不对,然后这里面呢,大家看好是不是有个AOP冒号adviser。
04:05
咱们说过声明式事物的时候,咱们就要用这个标签,这个是用来干嘛的,来将我们的某个组件设置为切面的,这个是用来干嘛的,设置公共的切入点,表达式的,这个就是来设置我们当前咱们的一些通知的,然后比如说我们现在咱们把上面的事务通知,你要把事务通知干什么来作用到我们的连接点上,怎么作用,之前我们用注解的时候,那我们是通过注解来。来标识咱们的连接点,而我们现在咱没有注解了,那你就只能干嘛呀,大家注意看好在这儿干啥的advice和ref来引用某一个事物通知,然后在这咱们直接把TX给写进来就行,然后大家再往下,你看在这是不是有一个point in cut,所以说这是啥意思啊,就是把我们当前咱们的这个事物通知啊,通过切入点表达式来作用到连接点上,那在这大家是不是就可以写切入点表达式的execution怎么写?先任意的访问修饰符和返回值类型com.at硅谷,然后点spring。
05:10
然后点service,然后点ipl对吧?因为我们要把事物加到我们的service的实现类上啊,大家注意是service的实现类中的每一个方法都要被事物管理,然后点星,然后在点点星,这个星表示的是这个in PL包下面所有的类,然后在点星表示的是类中所有的方法,这个咱们之前在讲这个切入点表达式的时候跟大家说过啊,这个类咱们也可以用星来表示,你包括包咱们也可以用星来表示,知道吧,好,这个表示的是包下面所有的类,这个表示的是类中所有的方法,然后咱们加上一个括号,然后在这呢是点,点表示的是不管它有什么样的一个参数,OK吧,行,那我们现在就把咱们的事物通知大家看这个标志,这不是一个环绕通知的标志吗?对不对?所以咱们现在就可以把我们当前事物管理器中的这个环绕通知来通过切入点表达式作用到连接点的那。
06:11
老师,那你配置这个事物通知是干什么的呢?大家注意,当我们把事物通知作用到连接点之后,大家说我们的每一个事物,咱不同的事物方法,我们是不是对它所设置的属性也不太一样?比如说呀,然后大家看,你看这里面有什么叫做TX-attributes attributete是啥意思,属性的意思,然后我们把这个标签选完之后,它直接在这给我们生成了一个子标签,叫TX冒号method干啥的,来针对于我们当前不同的连接点所对应的方法,然后我们该如何来设置它的事物属性,比如说咱们在这来写个叫BY,叫BY,然后by book。买书能看懂吧,然后大家再往下啊,然后这个针对这个是什么意思。
07:01
就是我们当前咱们通过切入点表达式,然后所定位到的连接点中的BYB方法,我该如何去配置它的事物,你看这不是事物的只读吗?这不事物的传播行为吗?这不是事物的回滚策略吗?这俩这不是事物的隔离级别吗?这不是事物的指这个超时时间吗?能看懂吧,好,这个大家一定要注意啊,行,然后下面的,那我们写完之后,咱们就可以继续来进行测试了,然后大家看啊,然后我在这我把这个配置文件算了啊,咱们再重新复制一个。啊。然后这个咱们叫做TXBY,什么叫做BYXL行点击OK,然后咱们来打开,大家注意,然后这咱们把配置文件给改了,改成是XL。TX杠叉ML能看懂吧,然后在这咱们同样是然后来调用我们当前啊,因为咱们写的是by bookook啊,那我们就直接来测试我们当前的这个BYB方法,然后咱们来看数据库里面啊,来看一下这个咱们同样是改成100,然后保存,然后我们在T-user里面,咱们在这给他就20,就20呗,对不对,20,反正这第一本书他也买不起对不对,好,下面我们在这来直接执行咱们的这个啊,Test by book方法啊。
08:18
行,大家看一下,你看他报的错是什么啊,然后咱们往下找。哦。来,咱们往下看啊来。这里面的错还挺长的是不是啊,估计是咱们在哪设置错了啊。哦,大家注意,你看咱们在这看到的这样的一个问题,什么问题叫class not phone的exception,那我们只要看到这个错,然后大家说我们是不是就知道是什么问题了,Class not found叫做类未找到异常,咱们只要看到这个错就是什么问题啊,而且这个类咱们见过没有,是我们自己创建的吗?不是,所以说这个时候咱们只要看到这个错,它就是少加包的问题,知道吧,那行,大家注意好,那所以我们在实现叉L,基于叉L来实现声明式事物的时候,我们是需要有这个aspect的G,然后这个加包的啊,大家看一下啊,咱们的笔记里边没有写对吧,没有写,那咱们一会把它给加上,然后呢,我们是不是就可以自己把这个加包给它添加上呢?怎么加,大家注意来,咱们找到咱们的AOP的这个工程,对吧?A op里面呢,然后是不是会有一个什么,会有一个这个spring,然后杠aspect,大家注意咱们只要有这个依赖,它是不是就会。
09:36
帮助我们传递过来ape we对不对,所以说啊,咱们把它复制一下,然后来放到我们当前咱们的这个对吧,Transaction这个工程里面。行,然后咱们把它给加到这儿,然后加完之后我们来导入更新,大家看啊。好,然后导入完更新之后,大家说咱们这个价包是不是就有了,然后下面我们在这咱们再来一个执行,大家看。
10:04
好,这个时候是不是就可以看到我们之前咱们所说的那个错了,对不对,哪一个错呢?就是咱们设置的这个字段,咱们设置的是这个叫做无符号,但是我们现在咱们减完之后,它是不是就变成一个负数了,对不对?好,下边大家看啊,我们现在来一个刷新,这肯定没什么变化,咱们再来找到咱们的图书,大家看一下,你看这个库存是不是还是100啊,那说明什么?那说明我们当前通过叉ML,然后来配置咱们的声明式事物,咱们是不是也成功了,但是大家注意,在这一定要看好我们当前基于XL的声明是事物,它必须得干什么,他必须得引入我们的aspect g的依赖,OK吧,所以说咱们可以在这来加一下啊,好,然后咱们需要注意的问题啊,咱们需要注意的问题。注意。好,然后基于叉ML,然后来实现的声明是事物,对吧,然后咱们必须干什么,必须来引入谁的依赖,As啊,PE aspect j的依赖。
11:12
OK,行,那所以说咱们只需要在泡沫点叉L中来添加一个什么呀,添加一个这样的依赖就行啊好,因为咱们的依赖具有传递性,那所以说我们是不是把这个依赖引入过来之后,那它是不是就会自动将我们当前的PE这这个依赖引入,OK吧,行好,那我们下面咱们再往下看,大家注意啊,然后咱们来找到我们的这个配置文件,但其实咱们这样配置完了没有呢?没有大家注意,那我们现在是需要把我们的各种方法大家都配置出来的,比如说咱们看一下。咱们的笔记里面的配置你看啊,我们get开头的方法。然后大家需要在这设置出来,然后get开头的方法,这不都是查询吗?对不对?Get开头的方法就是获取什么什么数据,所以说我们在这就可以来写个get星星来表示的就是任意,那我们当前的方法名只要是以get开头的,那我们就可以来设置一个指图的属性,如果是query开头的,咱们也可以设置只读,如果find开头的也设置只读,当然这就要跟大家这个平常命名的一个规则有关了,对吧?比如说你的查询你都是以select开头的,Find开头的,Query开头的,那大家就可以在这呢给它设置出来啊好,然后下面咱们还有save,对吧,还有update,然后还有delete,比如说咱们以所有的添加功能都是以save开头的,那大家就可以这样去写,如果是以update开头的,那咱们就这样去写对吧,然后大家需要去设置哪个事物属性,大家就把这个属性给它加上。
12:47
能听懂不这样的啊好,那有同老师,那如果我现在我的方法它不是get开头的,不是query开头的,不是find开头的,也不是save update,还有delete开除的,那这个时候我们的方法会被事物管理吗?大家注意不会。
13:02
你听好啊,是不会的,所以说我们在这儿可以写个什么,大家可以在这来写上一个星。OK吧,你在这来写上一个星之后,然后就表示我们当前咱们的连接点,咱们的切入点,表达式所对应的连接点的所有的方法,它都要被事物进行管理,能听懂不,比如说呀,大家看好我们现在呢,然后咱们在这儿呢,咱们这样啊,我把这两个标签啊,或者说咱们在这咱们随便来写一个吧,我把这个东西咱们写成什么,咱们就给它写成是buy books吧,行吧,那大家说我们当前咱们这个要调用的方法,它是白布吗?不是,然后我们现在咱们再来一个执行,大家看啊。好,然后我们现在咱们来一个刷新,大家看是不是变成99啦,然后我们现在咱们再看T-U的,这肯定不会发生变化,对不对,所以说大家看啊,我们特别是你在通过叉ML的方式来实现声明是事物的时候啊,我们当前的你。
14:06
切入点表达式所对应的连接点的方法,咱们必须要把它通过TS冒号method给它设置出来,然后呢,来设置我们当前咱们所对应的连接点的这个方法,它该如何处理事物,如果你不设置的话,它是没有任何功能的,它是不会被事物进行管理的,知道吧,所以说呀,然后大家在设置其他的事物方法的这个细节问题的时候,如果咱们还有其他的一些方法他没有匹配得到,大家就可以在这来写个星,这个星来表示的就是切入点表达式所对应的连接点的所有方法都要被事物进行管理。能看懂吧,这样的啊,行,那当然了,那我们这个基于XL的声明式事物呢,也是啊,以咱们用的也不多啊,我们用的最多的还是我们基于注解的生命是实物啊,好OK。
我来说两句