00:00
好,那下面呢,咱们再来看一种情况啊,就是我们前咱们刚才看源码的时候啊,咱们的每一个拦截器。它的不handle,咱们是不是都让它返回处了,对不对,也就是说咱们的每一个拦截器是不是都选择了对当前的控制器方法进行放行,是不是啊,对吧?好,OK,那如果我们当前的某一个拦截器它返回的是false怎么办呢?就比如说大家看咱们把咱们的这个second intercept里面,咱们把它给返回一个force,大家说可不可以,可不可以啊,可以吧,下面咱们再来重新部署,然后大家看这个效果啊好,这个时候这个效果就完全不一样了,知道吧,就完全不一样了啊好,因为大家刚才在看咱们的源码的时候呢,大家也都能够看出来,对吧,如果说返回的是false,其实咱们从咱们的Dis part of let里面,咱们从咱们的这一行代码大家就能够看懂啊,如果我们当前返回的是false,咱们后边的代码还会执行不?还会执行,不会了就不会执行了。因为咱们。
01:09
那选择的是拦截,那我们当前的控制器方法肯定不用说,这肯定是不会执行的,对不对,对吧?但是咱们经过观察之后,如果当前这儿返回了,那当前的方法就结束了,那咱们的post handle是不是也不执行了,对不对,是不是,那咱们的after completion是不是也不执行了呢?那咱们就来看这个源码啊,首先呢,大家看好,我们直接来刷新页面可不可以啊,可不可以啊,可以吧,好,来直接刷新,然后咱们把控制台呢,然后来给它清空一下,好,大家看是不是又进入到这儿了,其实这下面的东西咱们就不用看了,它都进不去知道不?咱们只需要看这个方法就行,大家说对不对?来,咱们进去之后,大家看咱们就走到这儿了,同样是这个地方啊,好,然后呢,咱们对我们当前这个拦截器集合中的这个拦截器啊,进行循环好,然后第一次循环,然后应该循环的是咱们。
02:09
Prime VC提供的那个对不对?来咱们往下走走,那大家说那个拦截器返回的肯定是触法是不是啊,对吧?好,OK,来执行大家看没问题,这个时候intercept index等于几啊,等于零是不是啊,好,然后再往下走,大家注意大家发现没有发现它的规则呀,就是咱们的过滤器,咱们的这个拦截器,它只要不返回处,它只要哦,只要不返回false,因为返回false的话,应该执行的是这里面内容对不对,那如果执行这里面的内容的话,大家看这儿返回false,那后边的代码还执行不执行啊,不执行了,所以说大家看好,如果咱们的pre handle返回的是false,会给咱们当前的这个index赋值吗?会不会,不会,所以说这个index它最大应该是等于几啊,应该是等于咱们的pre handle返回false之前的这个拦截器。
03:09
的,所以能听懂不能听懂不好,OK啊来,那咱们刚才是不是已经执行了第一个拦截器了,对不对,然后下面第二个拦截器,大家说是谁,是不是咱们的first intercept,这里面咱们返回false了吗?没有也是true,所以说它能够正常执行,这个时候它是等于一的,OK吧,然后再往下走。是不是该second intercept了,是不是返回force了,那返回false了,大家看调用拦截器的pre handle方法,返回了false,又加了个非,那是不是就要执行它了,对不对,对吧,好,OK,大家看好,我进去之后,诶,大家看这段代码熟悉不熟悉啊,熟悉吧,这个方法大家熟悉不熟悉不熟悉,这是干嘛的?这是干啥的?这是不是来调用咱们的拦截器的after completion的方法呀,是不是来大家要是忘了,咱们就往下看看,大家看啊好,咱们在这儿调用的是map handler,然后trigger after completion对不对?来看这这儿不也是trigger after completion吗?是不是啊,那为啥在这加的有对象点,在这没有加对象点呢,为啥?
04:33
啊,大家说你知道你当前的这个对象是啥不?这对象不就是咱们的handler这个cution差吗?是不是啊,你是在这个类中去访问了这个对象的这个方法是不是啊,但是你在当前本身咱们的这个对象它就是这个类型啊,那你在当前这个类型里面去访问当前类型的方法还需要加对象吗?需不需要?
05:00
需不需要啊,不需要,这能听懂吧,能听懂吧,哎,行啊,好,然后所以说大家会发现,如果我们当前咱们的pre handle方法返回的有false的话,你会发现post handle是一个都不会知晓的,大家说对不对,对不对,对吧,Post handle是一个都不会执行的,但是谁会执行啊,咱们的after completion会执行,而after completion在执行的时候,它是跟谁有关的,它会便利几个拦截器跟谁有关,大家说是不是跟咱们的index有关的,对不对,而咱们的index对应的是谁返回false之前的这个拦截器的索引对不对,对吧?所以说当我们进到这个方法的时候,大家说这个拦截其索引等于几等于一,好,咱们进去之后大家看熟悉吧,熟悉吧,这是不是一啊?
06:00
啊,一大于等于零,那在这咱们的这个循环会循环几次,两次,第一次first intercept,第二次spring VC提供的拦截器,大家说对不对,对吧,好,OK,咱们往下走,走到这儿大家看这是不是咱们的first intercept,好再往下走,OK,再执行,是咱们spring VC提供的,能听懂吧,好给大家看一共执行了几个方法。一共执行了几个方法,一共执行了三个方法,如果都返回处应该执行六个,大家说对不对?那咱们来总结一下,大家说这个东西咱们应该怎么总结啊?如果咱们现在有多个拦截器,能听懂吧,好,然后呢,这多个拦截器里面啊,如果有其中一个拦截器进行了这个返回了false,那这个时候handle都谁会执行啊?大家说handle都谁会执行啊?大家说pray handle谁会执行?比如说我有五个拦截器,分别是first second啊,One two three five four啊,One two three four five是吧?啊,一共有这五个,然后这五个拦截器里面,咱们的第三个拦截器,然后返回了false pre handle返回了false,这个时候大家说是什么情况啊?One two three pre handle会执行。
07:31
行,大家说对不对,对不对,对吧,在后边的for跟咱们的five会执行吗?不会,因为代码到此结束了呀,大家看我把这个执行完,在这儿是不是就返回false了,你在这儿返回了false,我们在这儿是不是就返回false就直接return了呀?大家说对不对,对吧,好,OK,直接return结束了,对不对?所以说pre handle是谁会执行返回force的这个拦截器和它之前的拦截器的handle会执行,大家说对不对,对吧?一定要注意啊,返回force的这个拦截器的普handle会执行,不会,那一定得执行,你不执行你咋知道它返回的是false的对不对,对吧?所以说一定是会执行的,好,再往下post handle是一个都不会执行,大家说对不对,因为我们刚才咱们在看咱们返回forces的这些代码里面,是不是没有任何一个地方去调用了post handle,对。
08:31
对不对,对吧,然后再往下,那咱们的after completion谁会执行啊,谁会执行返回first pre handle返回first这个拦截器之前的after compleation会执行对不对,对吧,为什么?因为它是根据索引执行的,而咱们的索引它最大等于谁返回false之前的这个拦截器的索引对不对?所以说after completion谁会执行啊,返回force之前的拦截器等after completion会执行,能听懂吧,好啊,行。
09:09
啊,这个东西咱们也就是看看源码,然后最起码咱们对吧,这个源码咱们也能从这个源码里面看看别人是怎么写的,是不是啊,哎,你说这个,你说这个东西咱们以后会不会去考虑有多个拦截器,谁返回false,谁返回处对其他的有没有影响呢?说实话这个考虑的也不是很多,知道吧,所以说咱们这个过程,咱们纯粹就是来看源码的过程,OK吧,哎,行啊,好,所以说大家看咱们在这给大家总结的有啊,就是pre handle返回,就是某个拦截器的pre handle返回false的情况,好,然后pre handle返回false和它之前的拦截器的pre handle都会执行,这个能看懂吧,然后post handle呢,都不执行,返回first拦截器,之前的拦截器的after completion都会执行,能看懂吗?好啊,这个源码大家能看懂吗?
10:10
能看懂不好啊行,那咱们下面我就把这个断点咱们直接来撬过,然后咱们把这些断点呀,然后先给它去掉,等到咱们今天下午再看咱们的源码的时候,咱们再具体的说OK吧啊。
我来说两句