00:00
好,那我们JD bc template的一个简单使用呢,就给大家已经演示完了,那下面的那我们就来学习一下咱们spring中的声明实事物,那首先呢,咱们要想学习声明式事物啊,那我们就要学习一个跟它相对应的一个概念叫做编程式事物。好,那什么是编程式事务呢?咱们从名字里面就能看出来,我们要想实现事物的功能,那我们就必须要自己去编写实现事物的代码,好,这个就是编程式事务,就比如说我们在没有学习声明式事物之前,我们要想来处理这个事物,咱们怎么处理呢?大家想一下。所有的事物的代码是不是都需要我们自己去写呀,对吧?比如说我们在三层架构中,我们要把事物加到哪一层,要把它加到咱们的业务层,那所以我们就需要在service层里面,对吧,然后来操作咱们当前事物的这个代码,然后怎么来写,大家注意,在我们的核心操作之前,然后要关闭事物的自动提交,然后呢,在咱们的核心操作之后,如果有异常则回滚,没有异常则提交,最后在咱们的finally里面,对吧,然后来释放资源,然后这是我们当前通过编程式的方式,然后实现事物的一个过程,好,然后,但是大家也能看到它非常的麻烦呀,对吧,就像是他的两个缺陷一样,细节没有被屏蔽,具体的操作过程中,所有的细节都需要程序员自己来完成,比较的繁琐。
01:27
因为这个东西大家注意,咱们抽不出来,以我们之前没有学习a up的情况下,你用面向对象的思想,你能把它抽出来吗?咱们是抽不出来的,为什么?因为它不是一段连续执行的代码,而是分布在我们核心操作执行的过程中,对吧?哈,所以说咱们用面向对象它是抽取不出来的,那所以说呢,那我们大家想,你要是写一个两个方法的话,咱们加手动加上事物还其实还行,但是如果说我们现在咱们有好多好多个方法,就像是咱们以后一个完整的项目,对吧?然后我们一个完整的项目中,所有的业务层的方法都需要加15,那这个时候大家想,比如说咱们有好几十个,甚至上百个,那这个时候咱们每一个方法都需要手动添加15的时候,它就会变得非常的繁琐啊,还有呢,就是代码的复用性不高,那咱们学面向对象,面向对象思想最重要的一个,咱们实咱们实现面向对象最重要的一个目的是为了干什么的,大家想一下,不就是来提高代码的复用性吗?但是你会发现,如果我们没有学习a up的时候,你说你实现事物的这些代码,它能提高复用性吗?不能,对吧,因为咱们抽取不了,那所以说封装不了,那我们现在每一次都得需要我们。
02:44
自己去想啊,所以说的非常的麻烦,好,那下面的呢,我们就来看一下咱们的声明式事务啊,这个声明式事物呢,大家注意,其实咱们的框架声明式这个词呀,然后其实对应的就是咱们的框架,也就是说在我们没有学习框架之前,我们要想实现什么功能,咱们用的就是编程式。
03:05
就是说我们实现什么功能,代码就得自己我们去,就得由我们自己去编写,而我们学习了框架之后,那我们现在咱们用的就是声明式的方式,什么叫声明式?就是说我们现在只需要通过配置,或者说通过咱们的一些代码,然后就可以来实现这个功能,具体实现功能的过程由谁来完成,还需要我们自己去编写吧,不需要然后由框架来完成,就像是声明式事物一样,对吧?我们只需要通过简单的配置,然后就可以来实现事务管理,但是这个具体的过程由谁来实现,是我们自己去写这个代码实现的吗?不是,而是由我们的框架来实现的啊。好,那下面大家看,你看咱们事物控制的代码呢,它是有规律可循的,确实因为它都是一样的,对吧,它没有不一样的地方,咱们说过事物的操作就这四个步骤对不对,然后啊,关闭自动提交,然后下面有异常回滚,没有异常提交,最后释放资源对不对,这样的啊,然后代码的结构呢,基本上是确定的,所以说框架就可以将固定的模式的代码抽取出来,然后进行相关的封装,那它到底是怎么来封装的呢?大家可以想一下,我们学完a up之后,其实我们也可以自己通过a up来把咱们的事物功能封装一下。
04:24
怎么封装,大家想一下。首先咱们这事物是不是代码都是一样的?那所以说我们现在是不是就可以来创建一个切面,因为面向对象抽不出来,它不是一段连续执行的代码。所以说我们现在呢,就需要通过a op面向切面编程,把咱们事物相关的代码,然后抽取到我们的一个横切关抽抽取到咱们的一个千面中,对吧?这就是咱们要抽取的横切关注点嘛,对不对?好,当我们把它给封装到一个切面里面的时候,我们可以选择来使用那四种普通的通知,分别是前置通知,返回通知,然后异常通知,还有后置通知,当然我们可以也可以通过一个环绕通知,一个环绕通知就可以来解决事物的问题。
05:11
对吧,因为我们当前咱们事物的操作,它就是在核心操作执行的过程中,分散在咱们核心操作执行的过程中的这四个位置,所以说咱们用一个环绕通知是最方便的啊,好,然后呢,我们就可以把咱们当前咱们的这个事物的代码,然后添加到我们这个核心操作执行执行的过程中,然后再把我们当前所写好的这个通知呀,通过咱们的切入点表达式来定位到我们当前需要被事物管理的方法上,其实也就是咱们service中的各个方法,OK吧,这样的啊,所以说这东西咱们学完a up之后,我们也可以自己写,但是呢,在咱们的spring中呢,然后它有一个声明式事务的功能,然后它是不需要我们自己去写我们当前咱们事务管理的切面,以及签面中的通知的,也就是他直接把这个签面跟通知就给我们写好了,那我们现在要做的事情,大家说是不是就更简单了,在声明事事务中我们只需要干什么?
06:11
把我们当前咱们的这一个什么,把我们当前事务管理的切面中的通知直接定位到咱们的连接点,也就是咱们需要被事务管理的方法上就可以了,这个大家注意啊,所以大家要大家要想好了,声明是事物这东西,它到底该怎么去用,对吧?咱们可以顺着咱们的思路呢去思考一下,如果我们自己写,咱们是怎么写的,而我们现在的声明式事务里面,他为我们做了什么,他把我们实现事物功能的这个切面,还有通知已经写好了,那所以咱们只需要把通知作用到连接点,套到连接点上就可以。OK吧,行,下面大家再来看,那咱们封装起来之后啊,我们只需要在配置文件中来进行简单的配置即可完成,那是相当的简单,大家注意,真的很简单,你比如说下面咱们就要讲基于注解的声明式事务,对吧?怎么怎么做啊,非常简单,你只需要在咱们的配置文件中加入一个标签,叫做开启事物的注解驱动,然后我们需要哪一个方法被事物进行管理,你只要在这个方法上加上一个注解,叫做it transactional完事。
07:20
这就可以了,非常简单啊,一个配置一个注解就可以了,好下面呢,我们再来看,那它有什么好处对吧,提高开发效率,那确实那咱们就不用在编程式,再使用这个编程式的这个失误,对吧?然后每一次实现失误功能失误的过程都需要我们自己来处理了,对不对,好,再往下,然后消除了冗余的代码。对吧,然后呢,这就就就是提高咱们代码的这个重用性嘛,对吧?好处三,然后框架会综合考虑相关领域中在实现在实际开发环境下有可能遇到的各种问题,进行了健壮性,性能等各方面的优化。哎,大家注意,这是啥意思?也就是说我们spring中为我们提供的声明式事物,它不仅仅是简单的为我们实现一个事物的管理,它同时呢,也可以帮助我们来设置事物相关的一些属性,就比如说呀,然后我们可以来设置事物的只读对吧?设置事物的超时时间,设置事物的回滚策略,设置事物的什么隔离级别,以及事物的传播行为,哎,大家注意,像这些事物相关的属性,我们都可以通过spring中的声明式事物来设置,哎,大家注意,非常的方便,只要是跟咱们事物相关的一些问题,咱们都可以通过声明式事物来解决啊。
08:39
好,下面大家再来看,那所以说咱们总结下面两个概念,编程是自己写代码实现功能,然后声明是就是通过配置,然后让框架帮助我们实现功能,OK吧,哎,行,这个大家注意啊。好,那这是我们的声明式事物的一个概念啊,那下面呢,我们就可以来实现一下咱们基于注解的声明式事物,大家注意,然后这里面呢,咱们先讲基于注解的,再讲基于XML的,对吧?然后呢,把咱们的这个声明式事物,那当然咱们以后用的肯定是基于注解的声明式事物,毕竟呢,它非常的简单,该如何用,我刚才也跟大家说过,只要在配置文件中加个标签,然后在我们需要被事务管理的方法上加上一个注解,这就完事了。
09:23
知道吧,哎,非常简单啊,其实下面呢,咱们就来实现一下啊。
我来说两句