00:00
执行原理我们大体上了解了啊,那么。人家这个啊,它真正的。代码是不是像我们分析的这样呢?下面我们就来读一下源码。这个读源码读谁呢?很重要一个啊,看好读它filter chin。链呀,对不对,Filterin好,我们打开这个源码。我把这几个关了啊。把这个关了,Filter这是接口吧,我们要看肯定要看谁。肯定要看他的实验类啊,那他的实验类怎么找啊。Control team是不是查看它的继承实现关系啊?这是它的实现类application filter群。那这是我们同看。
01:02
对,他来实现。好,打开这个源码,你看它实现了filter。那这里边儿我们读谁呢?看好啊,这有几个关键的东西,第一,Increment。增加是吧?Increment,这是个常量,十记清楚啊,一会要用它。在他这儿。这是数组,数组,数组元素是什么?Application这个东西没见过呀。但是filter config你见过吧?这是个接口application filter config是filter config这个接口的实现类。你看看。他是不是实现了con呀?
02:01
对不对。The felt con又是什么东西了?Felt con?是这个filter的配置信息,我们一个filter就会有一个filter,有两个filter就会有两个filter,也就是说filter和filter con之间是什么关系?是一对一的关系。那一对一的关系也就意味着我们filter config就可以代表了filter。所以他就是filter,它就可以代表这个filter。那这个数组里边放的元素是什么?是filter config。但是。你看他起的这个名字叫什么,Filters?Filters什么过滤器?这就刚才说的filter con,它就可以代表了filter,所以我们在这儿起名就叫filters。
03:09
好,这个数组,这个数组就是我们刚才说的那个数组。再看。这还有个什么?这儿还有一个。POS什么东西啊,Position位置。The int就指的这个int呀。PS the int which is usedto。保存保持是吧。The current position in Thein什么意思啊,这个整形数啊。被用作保存当前的位置。在哪儿的当前的位置啊。在过滤器。
04:00
在这个过滤器链里边的位置。再看看N。他又是干嘛的?Thet啊,这个int整形数是吧?Which gives the current number of filters in the ch,这这这这个是什么意思啊?哎,这个我告诉大家啊,我们刚才说这个不是filter是个数组吗?它里边存放的元素是什么?是filter,我们现在就说filter了啊,不说这个filter con的意思了,它里边存放的就是filter。数度多长?假设说数组长度。我创建的数组长度是几,是十?而现在里边存放了几个呢?现在里边一共和我这个请求相匹配的。有六个。数组长度是十。
05:01
里边放着六个,那么N的值就是六。我现在正在执行的是第几个,第二个position就是二,当我position变成三的时候,它是不是执行就是第三个呀。Position变成四的时候,它是不是就执行第四个呀。OK,就这几个啊,当然这有个solid,这solid干嘛的?The solid instance solid实例,Tobe execute by the ch。将要被执行的,在链里边,将要被执行的那个,就那个目标资源呢。好这几个啊。啊,这几个变量,我们重要的变量先简单说一下,然后我们首先来看。CO是不是打开它了啊。
06:04
打开我们是查看它的。结构这里边找谁呢?有个叫做ADD filter。添加filter,这添加向哪添加呀,当然像这个数组里边添加呀。你看着。怎么添,怎么个添加法,哎,对了,这里面先看着啊,我这个filter这速度现在。刚创建的时候长度是几零啊,这数字长度是零。好,我们来看它ADD filter。Adda filter to the set of filters哎,添加一个filter到哪到filter集合,That will be execute in this。
07:01
将要被在这链里边要执行的,OK,我们来看啊看。添在谁的呀,Con呀,他是不是代表filter了,先看第一个注释。去干嘛的?Prevent。Prevent。阻止禁止是吧?The same filter being added multiple times。阻止,禁止相同的filter被添加多次。就是你不能让同一个。往这链里边加多次。他是为了防止这个东西的,所以你看着他在那儿做什么?这是不是增强泵循环呢?他做了个便利,便利这个数组filters。
08:00
如果当前正在便利的这个filter和谁和这个felt chin。就你和你要添加的这个filter怎么是同一个引用。结束,直接结束,我就不添加了,我里边有了,我添加你干嘛呢?直接return明白吧,他便利挨着找挨着找,最后我们发现每一次比较了都不相同,那这句话是不是永远不会执行啊,他不执行,For循环执行完毕了。往后执行了,他要能够往后执行,大家想想说明什么。说明在我的这个数组里边没有要添加的这个filter对不对,所以他就阻止了相同的。Filter被添加多次了。OK,这是这个增强风循环它的作用,它是干嘛的,先别管我们看它。
09:03
这干嘛的。这不就是把这个元素复制给。下标为N的。这个元素是不是把这个对象是不是复制给他了,这是啊,做了一个。指向吧,对不对,这引用嘛。也就是说现在的filters n这个元素就是这个filter conflict了,当然执行完它以后,N的值是不是自自动加一了,下一个再添加的时候是不是直接就给这个N了,刚刚加过一的那个N呢?对不对。诶,这就是添加了我们的filter。他又是干吗的呢?他说啊,如果N等于等于,点S等于等于filters.lengths。
10:00
这是那个数组的长度吧。这个呢?这个是里边包含的。我们那个过滤器的个数啊,刚才我不是说了吗?如果我数组长度是十是吧,那就是N似是十啊,N是几?N是六,我一共这里边放了六个N,是不是就是六啊。诶,现在是什么,现在长度是十,我一共十个元素,但是我的N的值是几?N的知识也是六,N的知识不是不是不是六了,N也是十,那大家想一下,如果说啊。我们没有这段。如果说我没有这段,我现在直接往里边添加。直接添加的话。那说明你注意啊。我现在往这儿加了直接执行这句话,我说没有这段啊,是不是直接执行它了,现在N值几十啊。
11:07
我FS这个数组的长度是十,会不会有一个元素的下标是十啊,肯定不会呀,是零到九嘛,所以是不是就验。速度下到越界了呀。对不对,所以你注意啊,如果他这做的什么,就是对越界的判断,如果你的N。现在就和我的这个lance。和我数的长度是相同的,怎么办呢?我后边做的是锥。这三句话做的是扩容数组扩容。我又新建了一个数组new filters,对不对?我新建一个数组。你看。
12:01
N,你这个N,那就是原来数字长度啊,N加上诶这个东西。几啊十啊。我们刚才看他了呀,不就是他吗?我让你注意他吗,是不是十。N加十。你原来不是十吗?我现在又加上十,现在变成几了?变成20了,现在这个新数组长度是20。这句话干嘛的?System点。A copy这个工具用过吧,它干嘛用的复制呢?它要把这个数组的值。全部复制给他,从哪开始?这个数组从下标为零的这个元素开始。
13:04
全部复制给这个数组,下标为零的这个数组。复制多少?长度是N。那它的长度是不是N。它的长度是不是N加十啊。把它里边所有元素的值都复制一份给了他。紧接着呢。Filters复制为new filters,这又是什么意思?引用啊,我这个引用是不是指向它了,也就意味着原来那个老的数组,长度为N的那个老的数组就可以被垃圾回收了。可以。Garbage collection g呀,对不对。我现在fes。
14:01
指向哪了?指向这个news了。数组扩容。OK。这就我们说的ADD filter。好,这个分析完毕了。这是分析的什么添加,你注意这是添加,向数组中添加。F。
我来说两句