00:00
好,那我们现在呢,咱们知道了该如何配置,那下面呢,我们就通过咱们的源码,然后咱们简单的看一下,然后去验证一下,然后咱们所说的拦截其中的三个方法,它的一个执行位置啊好,然后咱们把这个注释调,咱们就用最简单的方式,就用这个标签吧,然后来配置一下。好,直接把它给设置在这儿就行啊。行,然后比如说呢,然后我们现在咱们要干什么,然后咱们先在我们的拦截器里面呢,给大家写一下,然后咱们拦截器的三个方法对吧?首先第一个,然后叫做pre handle,然后这个方法大家注意在什么时候执行,然后在咱们的控制器方法执行之前,其实咱们刚才呢,然后咱们这个这个咱们其实是从源码里面看到过的,对吧?所以说我先把这三个方法执行的顺序呢,先给大家写出来,然后咱们再通过咱们的源码呢,去验,去验证这个问题啊,在控制器方法执行之前,然后来执行,然后其返回值,然后来表示什么,来表示对控制器方法的拦截,然后或放行或放行,然后这个拦截的话,大家注意咱们返回的是谁啊,拦截咱们是不是要来返回的是false,而放行咱们需要来返回的是TR。有一。
01:24
处OK,行,然后再往下,大家来看咱们的第二个方法叫做post handle,然后这个方法呢,它是在什么时候执行,在控制器方法执行之后,然后来执行OK,然后最后一个叫做after completion,然后这个方法又是在什么时候执行呢?然后它是在。然后咱们控制器方法执行之后,然后且渲染视图完毕啊,且渲染视图完毕,完毕之后,对吧,然后来执行啊,这个大家注意。
02:03
好,那下面呢,咱们就来看一下源码,首先呢,然后咱们先把咱们的这个断点呢,把这个跳过给它取消了,然后我们直接来发送一个请求,比如说咱们就看这个请求吧,下面咱们来一个刷新,大家看这就是我们当前控制器方法执行的这一行代码,对吧。然后在他之前呢。然后我们在这个地方,大家注意这个这一句话呢,然后就是来调用咱们的拦截器中的什么呢,来调用我们当前拦截器中的handle方法的。OK吧,这个大家看好,比如说我们现在咱们先看一下它,然后这个东西叫做map的handlera,然后咱们鼠标放上去之后呢,大家可以看到这是一个什么类型,这个东西叫做handle着excution Cha什么叫做handle了,叫做处理器,其实指的就是咱们的控制器方法,就是处理请求的一个对吧,程序,所以说这个handle了,其实指的就是咱们的控制器方法,Execution叫做执行China,大家都知道叫做链,所以说这个叫什么叫处理器执行链,然后这里面它一共包含有两个内容,首先第一个内容的话,大家来看三个内容,但是有两个都是跟拦截器有关的啊,首先第一个就是我们当前咱们的处理器。
03:23
我说过什么叫处理器,就是我们的控制器方法,大家看com at硅谷点controller.test control里面的test哈,方法来处理当前的请求,对不对?好,下面这个叫做拦截器集合,也就是说咱们的拦截器可以有一个也可以有多个呀,对不对,就像咱们的过滤器是不是也可以设置多个,你看这里面就有几个,两个,有一个其中是我们自己创建的叫first interceptor,还有一个是谁,还有一个是咱们的spring VC啊,然后它自己创建的一个拦截器,OK吧,好,在这儿还有一个叫做拦截器的索引,那其实我们当前咱们的这个对象,它的apply pre handle,它就是帮助我们来调用咱们的各个拦截器中的pre handle方法的。
04:09
能听懂吧,好,大家注意,所以说handle方法什么时候执行在我们当前。咱们的控制器方法执行之前执行你要知道这一句话是控制器方法的执行,知道吧,然后呢,所以说在它之前就是咱们的拦截器的普handle,那下面呢,我们再往下看,来大家看啊,那我们现在咱们是不是要来找到谁啊,找到post handle,比如说咱们在这可以来加上一个断点,然后有利于我们一会儿去观察源码啊好,然后这是pre handle的方法执行,然后这个是我们控制器方法执行,然后大家看这个,看这,然后map的handle,这然后这是啥?刚才跟大家说的叫做处理器执行链,然后叫open apply post handle,然后这一句话就是来执行我们拦截其中的post handle方法的。
05:00
OK吧,好,然后大家再来啊,然后我们现在咱们再往下走,然后那我们的after completion这个方法什么时候执行呢?大家看,然后我们这个,那我们当前咱们说的这个after completion什么时候执行,咱们给大家写的是什么时候。是不是应该是咱们渲染视图完毕之后,对不对?好,那在哪来渲染的视图,大家有印象吗?然后这个是不是来处理我们的转发结果,然后咱们进入到这个方法中,然后在这,然后咱们是不是就看到了我们的这一行代码叫做render,然后render是什么?是渲染的意思,是处理的意思,然后咱们把model and view传进去,大家记不记得咱们就是从这进入了,进入的这个咱们当前的这个方法中,然后去查看了我们当前所创建的一个视图对象,大家有印象吧?是不是好,所以说大家看好啊,然后我们当前的render,它就是用来干嘛的,渲染视图的,然后我们下面咱们再往下看,你看这render执行之后往下走,走到哪儿,大家注意走到这个位置叫做map的handle,咱们是不是又见它了,对不对。
06:11
这东西干嘛的?表示的是我们的处理器,叫做处理器执行链,然后来表示的里面有两三个内容,一个内容是我们的控制器方法,还有两个是跟咱们的拦截器有关的。对吧,然后在这呢,大家看它叫trigger after completion,然后这个方法就是在我们渲染视图完毕之后,来调用咱们的拦截器的after completion方法。能听懂吧,好,这个大家注意,我们从源码里面就能够看出来,你看嘛,这个代码执行完之后,是不是才会执行到这个位置,是不是好啊行,这是我们当前咱们的控,咱们的拦截器的三个方法,然后执行的一个顺序,咱们先把咱们的断点呢,先给它跳过。好,然后跳过之后呢,然后咱们从源码里面就可以看出来这个问题啊,那下面的呢,我们再来考虑一个问题,就比如说然后我们现在有多个拦截器大家看啊,然后咱们现在有多个拦截器,对吧?然后这个时候咱们要考虑的问题就是多个拦截器的执行顺序啊,多个拦截器的执行顺序,然后下面大家看一下啊,然后我们在这咱们还是先把这个断点呢,先给它这个取消掉,然后我们下面在这再创建一个拦截器啊,这拦截器呢非常简单,直接复制就行。
07:33
然后这个叫做first,这个叫SE,叫做second interceptor,好,然后创建出来之后啊,然后大家看一下,然后首先呢,咱们把咱们输出的这个内容呢,然后给它改了,然后改完之后,那我们是不是要对它来进行配置,怎么配置,找到咱们spring VC的配置文件,好然后在这个地方咱们是不是可以再配置一个叫做什么叫做second intercept,能看懂吧,因为咱们用的是注解加扫描的方式,所以说我们当前咱们的这一个bin对吧,然后它的ID默认就是咱们的类名的小驼峰是不是啊好啊。
08:13
好,那我们配置完之后,然后下面大家看好,我在这来重新部署,然后咱们重新部署一下,大家看这里边啊,然后咱们的拦截器执行的顺序是什么,以及拦截器中咱们的各个方法,然后执行的顺序是什么啊好,然后我们来咱们来一个刷新,然后大家看。啊,然后在这呢,输出的内容比较多,咱们再清空一次啊,然后咱们再刷新,然后大家看一下啊,大家会发现一个非常神奇的问题,就是我们当前咱们的first intercept对吧?然后呢,咱们的pre handle,咱们从这说吧,这个pre handle方法呢,然后他们两个是不是按照我们所配置的顺序来执行的,对不对,但是咱们的post的handle动呢,然后是按照咱们配置的反向的顺序来执行的,然后而且呢,我们当前的after compleletion也是按照这个反序来执行的,对不对,对吧,这个大家能看懂吧。
09:11
好,然后所以说他们两个执行的顺序跟谁有关,大家注意,它跟我们当前咱们在spring VC的配置文件中配置的顺序有关,你比如说我现在我再把它两个两个给换一下位置,然后这个时候大家再来看啊,可不是因为它的名字叫first second,然后它才按照这个顺序的,知道吧,是跟我们的配置顺序有关的啊,好,然后咱们把它给清空,然后下面我们再来一个刷新。对吧。好,咱们再来一个刷新,然后大家看啊,你看这个时候咱们的pre handle是不是应该就是先second再first,而咱们的post handle和咱们的after completion,然后像这两个,然后它是不是应该都是先first再second OK吧,所以大家注意,然后咱们最好咱们为了方便测试啊,咱们还是把它给换回来,然后来找到我们当前的这个拦截器,然后多个拦截器的执行顺序和谁有关,大家说大家想一下跟谁有关呀,是不是应该是和咱们在spring spring mvc的配置文件中,然后配置的顺序有关,配置配置的顺序有关,OK啊。
10:27
首先这个大家注意多个拦截器的执行顺序和spring和在spring VC中配置文件的顺序有关,然后那我们当前的咱们这个,但是每一个方法不一样,就比如说pre handle会按照按照什么的顺序,按照咱们配置的顺序,然后来执行,对吧,而。咱们的post handle。然后和谁?然后和我们当前的after completion,然后这个方法,然后是不是应该会按照什么,会按照咱们配置的哦,这是顺序啊,顺序好,然后会按照咱们配置的反序来执行,大家注意啊,反序来执行。
11:13
好,然后为什么他会这样呢,那下面呢,咱们也是还是通过源码呢,咱们进入到我们刚才所看到的这几个方法里面,然后咱们去看一下它到底是为什么会按照这样的一个顺序啊好。
我来说两句