00:00
看一看啊,今天下午讲的东西呢。还是啊,系统扩展还是系统扩展啊,这个第25版本就到这吧。嗯,咱们这个关了它吧,啊,这个关了。好了,咱们讲一下这个过滤器啊,Filter很重要啊,这个东西很重要,有一种思想,这个思想叫a op啊好,我们一起来看一看。行了,我把25复制一下啊,贴过来,这样我还是指出这个项目存在什么缺点。然后呢,我对这个缺点呢,进行一个改造。啊,来讲解我们的项目啊。25这个路径呢,咱们拿一下。
01:10
这样啊,我把这个打开。啊,看见了吧。Request sideco吗?嗯,再往这看,这个有没有啊,有了来再找。长啊,嗯,有没有啊,有是吧,啊再来比如说更新,嗯是吧,还有啊,咱这就打开这么几个吧,你烦不烦啊是吧,很烦。你说每个方法里面都写这么一句,这也写这么一句啊,这个也写一句,每个里边都写一句,那这个东西呢,你想一想,代码没有得到复用。这还好,这是一句吧,这要是个发邮件呢。是吧,这是可能是在每个方法执行之前都可能要发邮件啊,或者是给你手机发短信的,就代码不是一行两行的多了。
02:05
在这个里边要不要发邮件啊,发这个里边呢,也得发,在这呢,也都得发短信呢,客户要求了啊,每个业务方法在动的时候,在执行的时候必须的啊,给我发个短信。必须给我发个邮件。那这个时候的话,你你想一想,你这个里边都写一遍,都大码没有办法得到复用吧,而且这个程序你想一想跟业务有关系吗。为啥老忘啊?为啥我老忘这句话呢?跟业务没关系,我考虑编程,我只考虑业务就行了,我还我还天天考虑考虑你这些东西呢,我要考虑这分神嘛,是吧,我考虑这个东西,那我业务写不好了。是吧,就可能会出这个问题了,代码没有办法得到复用是一个问题,第二个问题呢,由于这个程序和业务逻辑没有关系啊,是非业务的代码容易遗忘啊。
03:01
另外呢,还有一个很重要的问题,由于业务逻辑代码和非业务类代码掺合在一起了啊,对业务逻辑代码它的扩展性就差一些了啊,组件的多用性,组件的独立性就差了啊,所以咱们来总结一下啊,这是有问题的啊,就是凑这么一个知识点啊,给大家凑这么一个情况吧,算是啊,给大家讲一个知识点啊,这个知识点呢,就是我们今天下午要讲的叫filter啊,叫不好理解啊,这个东西咱们讲慢点啊来。这边呢,我写上啊,这是第26个版本了。26。是这样的,在几乎啊,几乎在每一个serve light。这个的叫什么service方法中啊,在方法中都需要编写。
04:04
request.that character including啊,什么GB18030啊,都需要编写这个。这个缺点是什么呢?缺点是一。代码无法得到什么复用是吧,这是肯定的呀,你刚才是一样啊,代码复用没有吧,这不代码复用没有吗。下面这个也是一样啊,代码无法得到复用,还有注意啊,这个可能现在显显不出来它有什么不好的啊,有的老师写就写呗,我愿意写就这么一行写吧。是不好啊。
05:02
你是每个都写好呢,还是说只写一次就好呢?那当然是写一次好了是吧,以后就不用写了。你别小看啊,这个东西呢,其实现在呢,可能说明不了什么问题,但是这个代码呢,现在只有一行,但是我说了啊,有可能啊嗯,这个代码呢,可能是呃,一些其他的方面的啊,比如说像发邮件呢,发短信呢等等,它安全处理呀啊或者事物啊等等啊。行吧,那咱们看啊,这边呢,在每一个从句中都得写它代码,没有办法得到复用啊,还有一个问题就是啊,这些代码。大部分都是什么呢?和业务逻辑无关的什么代码。就是银行项目是这么写吗?正确,你是不是也是这么写啊?
06:01
保险行业还是这么写呀,那解决乱码你就解决个乱码在在哪不一样啊,是不是在哪都一样啊,所以我就称这种代码跟什么没关啊,跟业务逻辑无关啊,属于什么非业务逻辑代码啊。容易被什么呢?被我们程序员遗忘了啊,程序员遗忘了。忘记编写了,有可能。那和业务逻辑无关啊。因为程序员编辑程度大部分呢,只考虑什么程序员啊,编程的时候大部分可能只考虑什么呢?只考虑业务流程,确实是这样的啊,我们在公司开发的时候呢,开发这个程序呢,确实也是一样,有的时候就希望我们什么呀,只考虑业务流程,和业务流程无关的程序单独的抽取出来。
07:02
啊,业务逻辑代码和非什么业务逻辑代码掺杂啊,掺杂在一起。业务逻辑代码很难得到。扩展力啊,很难得到扩展力,业务逻辑不好扩展啊,业务逻辑不好扩展,组件的独立性差啊,组件的独立性差,组建的我们叫component组件总等差。耦合度高吧,耦合度高啊是这样。其实啊,我们还有一个开发思想啊,叫什么高内聚吧,低耦合吧,这俩人啥关系啊。
08:07
啊,达到高内距之后呢,就差不多低耦合了吧,要想低耦合是不是高内距啊,这俩是相辅相成的,我说一下这个事吧,啥叫高聚呢?就是说你要专业。啊,你不要那个,就像比如咱举个例子吧,公司啊,这个公司里边。就几个员工啊,一个。这个员工呢?既是董事长,又是总经理,又是销售员。明白吧,他是不是不符合高内域啊,不专业了,他有一天生病了,公司倒闭了,为什么呀,你这承担了所有啊,你管的事太多了,是吧?你不符合高内句了,你不专业了,你做的事情太多了,你说你既是医生又是教师,那你能看好病吗?
09:08
是吧,不行,你不够专业,所以我们讲究刚那一句什么意思,我们公司员工分工明确吧,那你就是销售啊,那你就是做开发的,你就是售前,你就是售后,很专业啊。高内聚就指的是专业啊,独立性强,你想独立性强了,那耦合度自然是不是就低了。耦合度低,你比如说我今天呢,可能是有一个员工出了点问题,那应该公司不受影响啊。是吧,所以呢,你不要啊,在这违背这个高内句啊,你说这个类你既想什么处理乱码,又想处理业务,还想记录日志,还想发短信,还想发邮件,都融合在一起,那你这样的程序就。耦合度就很很强了,你不不符合高内聚了,你没有这个高内聚的特性了。是这意思吧,你就没有这个高内句的特性了,你想一想,你现在这个类负责什么,你这类是不是负责处理乱码,还负责就更新用户信息吧。
10:07
所以你不专业。高,那句耦合你是违背了。组件的独立性差,组件独立性差会导致什么后果呀,复用性就差了吧,组件独立性差啊,会导致什么呢?复用性差,复用性差它就像那个内存条一样,你说内存条跟那个板子焊在一起,那拔都拔下来了。是吧,这就违背了叫高那句低耦合了内存条,它就是内存条是独立的,我拔下来,我说你的电脑坏了,我说给你换个内存条插上去,你的电脑能用。这就符合刚那句第耦合了。啊,所以这个你得知道啊,咱们这个第26版本,从这说什么呢?咱们今天啊,基本上不做什么新的功能,就做了一个查看投资人详细信息,第一个知识点就是今天上午讲的反射,今天下午讲一个过滤器,这都属于功能扩展啊,在我们项目中没有什么新内容。
11:06
就是项目出了点问题啊,我给大家聊一聊啊,这个问题怎么解决,这个问题怎么解决啊,就说一下这个东西,所以刚才说了啊,这样做不好,为什么呢?因为代码呢,无法得到什么。复用组件的复用性差,耦合度高,没有遵守什么高那句低耦合,这都比较官方吧,但是你别看这么这么多官话啊,你别看这么多官话,你到时候面试的时候你说上你还真管用。这个你得说啊,你得会说,要不然怎么体现你的工作经验啊。啊,你你你你你刚开始刚开始做,你这可能都不知道啊,什么刚才定和什么开发原则你都不知道啊,什么什么O是吧。什么D,什么a op是不是都不知道啊,不知道。所以有些官话的话,我觉得还是要说的啊,但是这个东西呢,其实说了这个。
12:06
不好理解。啊,你没有一个大型的软件开发项目经历呢,你可能很难去理解什么叫面向对象,你理解了吗?他不知道什么面向对象。是吧,面向对象的什么分析。面向对象是什么?设计面向对象什么?编程是吧?OAOB是吧?分析、设计和编程一套下来都是面向对象的,不用先建数据库,先从对象模型出发分析数据,分析对象,对象分析完之后自动生成表。就这样,后期你们学这个就是这样。它就是主要是设计我们类型之间的关系。关系一确立,将来这个表自动就有了。你关系描述好了,表就有。你面向对象,比如说在happen里面有个session啊,这个session跟我们session不一样啊,Session有个方法叫save,你只要save一下,这个里边跟上一个Java对象底层会自动生成insert语句,你不用编写insert语句。
13:11
你也不用编写什么update语句,这都不用编写了,你也不用编select语句,就面向这样直接。执行面向对象操作,就可以生成思索语句,就是这样的面向对象开发嘛。拐弯了啊。嗯,主要是说这个东西啊,就是咱们要解决一下这个乱码问题啊,这是属于什么代码呢?刚才已经说了,这属于非业务逻辑代码,而剩下的代码呢,可能合什么有关系啊,和业务逻辑有关,而这种非业务代码和业务逻辑代码融合在一起,可能呢,会导致这个组件的复用性差,确实复用性你到这写一遍是吧,你到这还需要写一遍,你到这还需要写一遍是吧,每个里边都写。啊,这是这个问题,所以高位第五格的还是要理解一下。
14:04
好,我来看一个文档啊,我们先讲一个知识点,把这个概念介绍一下,然后我们再来简单提一提啊,来找这个,找这个,我们来找一个啊嗯。对和对啊,复制一下,我给呢,大家复制过来啊,给它放到0719O高平的家贴过来,然后呢,这个改成00910啊。来幺零好了,我们先来看一看这个AOB和字符编码。我们介绍一个开发思想啊,一种编程方式吧,叫AOB面向横切面编程,听起来就难吧,嗯,很高深的样子啊,什么面向横切面编程?我们来解释一下啊,什么叫a op?我们现在的项目是什么样的呀?
15:00
啊,我们现在的项目是什么样的呢。没有这个吧,是吧,没有这个啊,这个没有擦掉吧,啊没有这个。现在的项目是这个样子的。在这儿有一个用户什么添加对吧,这个用户添加呢。我们先获取表单数据,然后操作数据库,最后跳转页面嘛,但这也是获取表单数据,操作数据库和跳转页面,但是呢,这个是保存投资人啊,这个是保存什么用户,保存用户和保存投资人啊,要注意保存用户之前需不需要设置字符编码方式。需要吧,另外呢,我问你啊,在这个里边需不需要再设置一下。需要吧,你在这是不是还得设置啊,所以你在这又把这个代码又写了一遍,对吗?啊,你又写了一遍,另外你想一想,除了这个之外,有没有可能还有其他的流程,有可能吧,有可能在这呢,是个保存什么企业吧,有可能是保存企业信息,那在这又一个保存企业信息,它步骤也是一样的,获取表单操作数据库跳转页面,在这也需要设置什么字符表方式,在这也需要每个里面是不是都写,都写了,都需要把这个写一遍。
16:26
这种代码叫什么?非业务代码啊,这个代码叫什么?业务逻辑代码,业务逻辑代码和非业务代码融合在一起组建的。独立性差,复用性差,每个里边都写,每个里边都写,有可能程娟忘了吧,啊,有可能忘掉了。最主要忘不忘吧,咱们这个事儿无所谓了,最主要一个问题,这个代码没复用。你说那老师每次都写字不好。再说了,这个有可能是一大堆代码,你要知道这个代码可能是几百行,为什么呀,就比如说发邮件吧,那个代码可能少不了啊这个。
17:02
是吧,你想银行的发邮件和那个叫什么银行项目的发邮件,和那个什么证券的和银和那个保险的发邮件,它代码一样不一样。不就是个发邮件吗?发邮件都是那么发,对不对,所以像这种代码,我们说了,这叫非业务流代码,它属于非业务代码。你每个地方都写一遍不太合适。啊,所以你看我怎么做的,我给他抽出来了。拿出来形成一个独立的组件。这个代码以后只写几次啊一次。然后以横向啊,这个词怎么解释呢?以横向,有横向就应该有纵向吧,纵向说的是业务流程。明白吧?将非业务逻辑代码,将非业务逻辑代码再强调一下啊,将非业务逻辑代码独立的抽取出来,形成一个独立的组件,然后以横向交叉的方式应用到业务流程当中的编程方式叫做面向横切面边长,简称a op啊,A是aspect啊,Aspect。
18:24
这是切面啊。横切面面向横切面编程,这样的开发效率能提高吗?代码只需要写,写几次,发邮件你不用老写,发短信你也不用老是写,你就写到这个组件中就行了,你以后凡是希望在这用在这用在这用在这用你给它横向交叉的方式给它应用进去就行了,这个只需要编程编写一次。这叫面向横切面,边成a op,啊,这个A是SPA。Aspect啊。As,这个。
19:02
横切面啊。这就是面向前面边上。哎,下面总结了吗?你看将和业务无关的功能。谁和他业务无关啊,设置字符变量方式是不是和业务没有关系啊,从业务流程中剥离出来就是你还得有个能力啊,这个能力是什么呀?你必须得能识别出来当前这个程序中哪个程序是业务代码,哪个程序是什么非业务代码,对吧?你想想业务有必要抽吗?银行业务跟证券业务能一样吗?不一样,这个代码是不是不会复用吗?但每个业务都不一样,你就别动它了,业务你就专题写就行了,像这种和业务逻辑没有关系的成绩,你不用在每个业务流程都写一遍,这个代码没有的办法得到复用,开发效率也是非常低的。如果有一种编程方式,能把这个和业务逻辑没有关系的程序独立的抽取出来,形成一个独立的组件,横向交流的方式应用到业务流程当中,那这样的话开发效率可以提高,而且你会发现在这个程序中编写的所有程序都是纯业务代码,跟跟业务没有关系的那些代码是不存在的。
20:13
我们大家知道,一个人在做一件事情的时候,如果专心去做这件事情的时候,可能会把这件事情做的很好,那这个程序如果我只处理业务,这种非业务逻辑代码可能不存在了。那这样的话,可能这个就很好扩展。是不很好扩展啊,那你说这又一会儿又这个发短信,一会儿又发邮件,中间是业务完事,下边又是业务全部掺杂掺杂在一起,那可能是扩展力就非常差了。独立性差,你扩展力就差了,所以还是那句话官话嘛,这是是吧,那这个东西我说一下啊,在面试的时候呢,你必须呢,把这个要说上来,你要是说不上来呢,可能呢,面试官呢,没有办法知道你这个开发了多长时间啊,或者你有多长时间的经验,或者你能不能胜任我们公司的工作。啊,可能会考虑了啊,所以这个时候呢,有一些东西啊,还是要站在一些高高层面上的东西呢,去看一看这个程序存在什么问题啊,其实你要不学AOB我能开发吗?我也能开发呀。
21:10
你就写呗,在这里边写就行了,是吧,写呗,这也能开发了,也没问题啊,但是这种编程方式我们也知道叫a op啊,变向横切面边长这么着吧,我给大家举个例子吧。举个例子啊,可能呢,这个例子呢,比较这个这个应该是好理解啊,我觉得挺好理解的来。呃,比如说这个。你去菜市场买菜去了?啊,你买的那个豆角啊,豆角吃过吧,豆角。就是那种那个扁豆。扁豆啊,你买了一斤扁豆回去了,中午呢,你要你要炒扁豆嘛,是吧,要吃。然后呢,你在这个做饭之前啊,你这肯定得摘一下吧,你不是说把这个豆角全放进去一下炒了吧,那不是那样肯定是不太好是吧。
22:10
整个没动是吧,你就放进去了。你都做过饭啊是吧,你看啊是这么着的,咱们呢,可以把这个豆角啊折成一段一段的,对吧,然后呢,再再放锅里边炒,是不是稍微好点啊。那我问你,你把豆角变成一段一段的,你怎么怎么能给它,能把它变成一段段的呀。第一种方式就是掰。那你比如说你回家了,是不是你没事了,跟你妈坐那聊天呢,是吧,一边聊天一边掰呗,反正时间还早呢,那掰吧。掰个一个小时半个小时都无所谓了,反正也不吃饭呢,还没到饭点呢,是吧,那这个就不讲究什么效率问题了,那就一块块掰呗,拿一根掰一下,掰一下掰一下,效率低吧,效率是不是很低?不行,效率太低。你这代码在这写一下,在这写一下,你写好多遍呀,是吧,你是不是要写好多遍啊,不行想个办法啊。
23:05
放菜碗上是吧,摆好一刀下去。面向横切面边长嘛。面向横切面边长,你这老写啥?你这写什么写老写是吧,不用写,一刀一下就完事了。快吧,那我问你啊,哪个是业务流程啊,你就把这个豆角想想象成业务流程。你就把那个菜刀。想象成非业务逻辑代码。是不是一个组件啊,这个刀除了切这个豆角能切其他的吗?能移植吗?可以啊。能移植啊,我在哪都能用吧,我切啥我都用它写。快呀,是吧。面向横切面边长怎么去理解,其实因为这个例子怎么想呢?就是说你要想,哎,有豆角式这么一个业务流程,然后呢,有菜刀,这么一刀下去就OK了,这样一刀下去就OK了,这样开发效率很高,为什么?因为你具有一个很强的抽象能力,你把这个切这个动作抽出来放到了菜刀上,它就是个组件啊,这个组件可以复用啊,在哪都能用。
24:19
面向恒基没变呢,就这么理解就行了。它里边有个字叫横啊,横呢和这个和这个什么纵啊,它的怎么区分呢?它这个纵向说的是什么?说的是业务流程。明白吧,它横向呢,它其实为了说的更加形象一些,所以所以称作什么面向什么横切面边上,你这个横切面是怎么来的呀。对吧,那你必须得切下去了呀。而且横着的那竖是谁?竖的就是纵的就是业务流程,横的就是非业务,你这样纵向切进去之后呢,你在这可能就用用了吧,你在这是不是就用了,在这是不是也用了,就这么意思啊,所以这个东西不好理解啊,这个东西实在是不好理解,才举了刚才那个例子啊,希望能帮助大家去理解一下吧,总之的横切面面向横切面变成这个中式呢。
25:09
我们在后期那个学的那个叫什么spring啊春天是吧,学这个框架的时候。这个a op呢是是必须要用的,比如说a op呢,控制事务后期呢,我们你想控制事务,你在银行上面是不是是这么写的一个事务代码吧,什么开启事务,提交事务,什么回滚啊结束事务吧,你到证券行业,你你你控制事务是不是还是还是那四行代码吧。单词都一样呗。都一样的话,你你想一想,这个代码是业务代码还是非业务代码。那非业务代码你老在每个类里边都写控制事务,控制事你烦不烦是吧?你把控制事务代码独立的抽取出来,形成一个组件嘛,以横向交叉的方式应用到业务流程当中,这种编程方式叫面向横切面编程,可以以后不写什么了,事物代码了,但是事务代码起不起作用。
26:00
企业。这样多好啊。是吧,你现在就像这个吧,设置字符编码方式这个东西啊,就是这的这个。你每次都写都写烦了,说你不写不写,它不写不代表它不起作用,它起作用。把它抽取出来,形成一个独立的组件,以横向交流的方式应应用进去啊。你说是这么说啊,大家想一想,抽好抽吗?蹭是个问题吧。所以第一项就是怎么抽。完事完事之后第二项就是怎么横向交叉切进去,切你把好不好切是吧,你得会切,你可会抽啊,先抽出组件,把组件抽出来之后,再横向交叉应用进去。这样就OK了,A op就完成了,大家要知道a op呢是一种编程方式,这种编程方式呢在软件行业得到广泛的应用。不是说Java中有听明白了吧,你要是其他的编程语言也有AOB编程。
27:01
能理解吧,所以你不要把它,你不要被这个Java束缚了,AOB呢实际上的面很广啊,AOB是一种面向切面的编程方式,在我们软件行业是很提倡的一种编程方式,叫aspect啊,叫面向横切面编程,这种编程我再说一下啊,将与业务逻辑没有关系的程序独立的抽取出来,形成一个组件,以横向交叉的方式应用到业务流程当中,这种编程方式我们叫面向横切面编程,简称a op啊叫aspect面向横切面,边长横呢跟这个竖是相对的啊,横竖竖指的是业务流程,横指的就是我们这个组件以横向的方式应用进,因为只有你横向的时候,是不是才会应用到所有的业务流程上上面啊,你这有业务流程,这也有,这也有,这也有,这也有这,那你切一下不就行了吗?那这样的话就不都就应用进去了吗。是这意思吧,嗯,要这么做啊,以后开发就奔着这个方向去就行了啊是a op大家看啊,从今天往后呢,其实往后啊,开发的程序就不是讲一些基础的知识点了,你想基础有哪有那么多基础知识点需要你讲了,So that,就那么点东西吧,Gsd就那么点东西吧,后期呢,其实都是从一个软件的一个高层去再再去看了。
28:19
啊,什么叫高层,就是可能是一种编程思想了,可能是一种开发模式了,什么单力呀,是吧,什么工厂啊。什么适配器呀,什么策略呀,是吧,等等这些模式我们都会讲。所以呢,后期的这个东西其实有点难度啊,你说听吧也能听明白,但是真正你自己去项目中应用都是很难的,怎么应用进去,我不提醒你不应用啊,我不提醒你这用面向横切面编程你不用。关键是这个问题啊,其实这个东西还是需要你不断的去开发,去积累,才才能够才能够学会这个东西啊,现在我只是从理论上讲一下啊。呃,另外呢,咱们这个说一下啊,有的人老师你不是讲filter吗?你不是讲过滤器吗?怎么讲讲讲到a op上面了。
29:08
我说一下filter呢,是符合AOB编程方式的,明白吧,也就是说这个filter是一项具体的技术。明白吧,而这项具体的技术是满足什么的?A op编程思想的,或者是编程方式的,所以提前呢,给大家介绍一下什么是面向恒期类编程,然后我告诉你filter呢是满足AOB的,后期呢,你们学这个tru框架的时候,我再提一提啊,记住了,在tru框架中呢,有个东西叫intercept。什么意思啊,这叫拦截器啊,和今天我们讲的这个过滤器呢差不多。他俩差不多都属于什么?AOPT编程方式。
30:00
行吧,啊这边的啊,记住一下,好,Filter技术符合a op编程方式,所以这边呢,只是从理论上啊给大家讲一讲啊,大家听一听,嗯,听一下这个东西,这些东西行了,这是理论上呢,我就讲到这,我说了你看看这个代码再说一下啊嗯,里边都写了,都写了,都写了,最关键这个代码是一个非业务逻辑代码,剩下代码都是业务逻辑代码啊然后呢,我今天接下来我要具体讲了啊,讲那个filter,然后大家重点掌握什么,一如何访问抽这个代码。啊。如何横向切进去行吧,你只要掌握抽也会掌握横向切,那基本上这个AOB呢,也就这样了啊好了,咱们来看一看filter啊,还得说一个事儿,我讲的这个其实可以放到前五天去讲。这属于什么里面的内容啊。明白吧,S2.4规范中引入了filter技术。
31:02
啊,只不过那个时候没有合适的例子给大家讲,可能讲这个东西太突兀了啊,所以今天呢,我趁此这个机会吧,啊,写了这么多类,那个每个类里面都写了这么一行代码,我也提出缺点,大家也看到了,我也讲了AO了,现在的话我们就讲一讲filter啊,知道呢,Filter应用在什么地方行吗?嗯。记住啊,是哪个哪个里面记住啊serve谁制定的规范,这个当然是散了是吧?Sun制定规范吗?记住啊,S2.4规范。此外规范有有有版本号吗?你说刚刚开始,他制定这个规范就一定是严谨的吗?那不一定吧。
32:01
啊,不是2.4啊,2.3说错了啊2.3。12.3规范中加入的啊,大部分的GPS的容器呢,都是支持的,就是基本上呢,如果比如说你现在啊,嗯,基本上都是支持这个这个filter的啊,你不用担心。To kd6啊to姆CAD6这个这个软件呢,它应该是实现了S2.5规范的啊,2.5规范的,它2.3呢早就过了吧,所以这个TOD6是支持的啊,这个呢,你你要知道这么一个版本号,也就是说2.3规范之前这个filter是不是没有啊。所以2.3之后才加上去的啊,行,来一起看一下吧,Filter过滤器翻译过来叫面向横切变边的那种方式,来看一看。过滤器看啊,这是什么IE浏览器对吧。这是最终的,来吧,大家想一想,最开始的时候,这是不是什么也没有?
33:01
什么意思,这什么也没有来,我给它封起来啊,上面没有的,这个都没有的。这个没有啊,这个都没有。来这个都没有。最开始呢,你想想这个程序其实就是很简单,IE浏览器访问吧,访问这个执行对吧,你这响应吧,访问吧,是不是响应吧,那就这样很简单。我们目前写的程序是不是都是这么写的?但是呢,你要想一想,在这个类里边,你要设置字符编码方式吗。你在这个类里面是不是也是设置字母培养方式啊,你在这要是还有个类的话,你是不是还要设置啊,所以我以后烦了啊,我怎么办呢?我把它我不写了,我这个类里边不写,这个类里边也不写了,我把这个设置字符编码方式的程序独立的抽取出来,形成一个组件。这个组件就是过滤器。明白吧?什么意思,比如说你以前啊,在这个时候来的。
34:04
在这来在这呢,还有在这呢,还有。啊,然后呢,你在这个程序执行之前,你需要执行什么设置字符电话方式设置吧设置吧怎么办,我不写了,我不写了,我不写了怎么着把它抽出来吧,放到这吧,这个东西我们叫什么the。翻译过来表示过滤器,也就是说我把设置字符编码方式的东西放到一个这样的对象中。然后我们以后所有的程序访问的时候都要经过它。它执行结束之后,然后再通过过滤器再分发执行什么。明白吧,是这样。直行,先经过它过滤,就像一个筛子一样,你见过那筛子吗?你见过那个,你知道那个过滤器吧?比如说咱们举个简单例子,自来水厂。
35:06
一个水是吧,你要治这个这个自来水的怎怎么怎么个怎么个情况,第一个第一个过滤可能是只过滤什么泥沙是吧,第二个过滤过滤什么。可能过滤,你说消毒吧。是吧,再往后过滤呢。它可能加一些什么矿物质元素吧,最后那个成品水是不是才出来啊,所以有过滤啊。大家看,这是通过发送请求,然后执行过滤,过滤再分发执行最终的资源,大家想这是不是一个菜刀?这是那个菜刀吗?它横向交叉的方式应用进去吗?切进去的吗?这不就a op嘛,面向横切面编程吗。当然过滤器一个吗?上面我能不能再加个过滤器,这俩过滤器行吗?十个都没问题,你要想执行这些资源,你先执行过滤吧,执行完过滤,咱们通过过滤器来执行最终的资源吗?那你想一想,以后还需要在这写这个字符表现方式吗?不用了,你的代码就复用了。
36:11
都都都都在这了吧,所以大家想想这个这个称作什么,这是个组件对吗。这是个组件吗?这是个组件啊好,我问你是组件吗?So,是组件吗?也是吧,好,我问你这个组件是这个这个对象的创建这个对象的,交给对象放的,这个都是谁去管呢。只有容器才有权利去管理这个对象的,我们叫这个对象的创建和对象的销毁吧,好,这个组件呢。既然是组件停了,Filter能移植吗?或者这个filter放在嘴boss服务器里面能运行吗?行,那么请问这个对象的生命周期谁来管理啊?也是它,明白吧,我们程序员还是没有权利去创建这个对象,明白吧,也没有权利去调用这对象的方法,这个对象的创建,对象的销毁,对象方法的调用都由谁来管理?
37:04
容器,所以这个filter好学就好学在哪了。你已经学过了。来怎么学的这个filter,你就得怎么学,它俩是完全相同的,只不过filter的优先级要比S优先级什么高。啊,这个理论上是这样讲一讲,过滤器是可以多个的都过滤,过滤完之后再执行,你想以后代码只要写到过滤器里边,这个东西都不用,都不用在这写了,写什么写发邮件老写什么呀,写到这就行了,写一次以后,这就不用写发邮件了。这也不用写了,这都不用写发邮件了。啊,是这样。所以这是理论上的啊,理论上给大家讲是这样讲,这边有这么一个图,我也不管了,来直接写程序,直接上程序呢,可能大家更明白吧,啊,我来写程序。好了,这边的话,我就把这个先关了啊,关了之后呢。
38:01
先把这块还差一个东西都写上啊。二要理解什么?理解a op的编程方式啊?理解a op的编程方式,第一个存在缺点我也指出来了,第二个理解AOB的编程方式,第三个就是。2.3规范中引入了filter技术啊,Filter技术,该技术符合什么a op编程方式啊,所以接下来第四个就是使用什么使用filter技术解决字符编码方式啊,Filter技术解决字符编码方式。啊,使用build技术解决字母表方式。过滤器。啊,我们一起来解决一下,这边我就先不解决了啊,我在这独立建个项目,我单专门的去讲这个future技术,讲完之后我们再应用进去行吗?来点右键,我们新建一个web项目,这个web项目咱们就叫FILTER1吧。
39:04
行吧,过滤器一啊我呃挨挨着排讲吧,来点这个啊点finish no吧no吧啊好了,这个过滤器大家看看怎么去实现,呃,我看看过滤器怎么给大家讲一下啊,这个东西我就先删了,把它先删了。我重新自己再写一下啊,过滤器啊,过滤器第一个来body这边呢,我们一起来看一下啊,这个过滤器呢。咱们就写一个路径吧,这个路径大家想一想,现在我写一个,嗯,怎么写,Request是吧,点get contest past是吧,杠了serve let,斜杠A,行吧,叫A什么serve吧,A serve好了,这边呢,发送这个请求,我先先把serve写一写吧,行吧,我来复制一下啊,接下来呢,我在插面文件中配一配。
40:07
打开唱片文件啊。其实这个东西讲了这么多啊,代码非常简单。来我这边呢,要写一个啊,这叫什么组件呀,Serve组件吧,来serve that哈,好了,这边serve light class加一个s name,然后我们加上去,Mapping加上mapping mapping加上s name,再加上URL partner好了,这边我把这个路径干什么呀,接过来了啊,放这了这个A吧,这个A啊,这边com点北京partner的点加了外的点S,咱们叫AS好,大家看现在我写过滤器了吗?没有吧,还没写过滤器啊,我就先把S写啊写上去,来这边呢加个包吧,来我这边呢写个类啊来复制一下,咱们呢点中它直接新建一个类吧,贴过来继成一个HTTP的go,好,这边呢,咱们点finish,然后呢,我们来看一下啊,这个咱们是点右键啊,咱们重写一个方法,就是那个盖的方法吧,OK啊,这个改成request啊,这个改成response好了。
41:14
这边呢,我就输出啊叫a service组件的service方法,开始什么执行吧,啊然后呢,到这干什么呢?它的方法是不是执行结束了,方法执行结束啊执行结束,另外呢,这个要知道这个叫serve that组件啊,这个叫S组件,是最终要执行的什么资源,我们要把它前面加过滤器。明白这意思吧,也就是说原先的时候我们是不是代码之写在这儿了是吧,现如今我们代码抽出来放到什么过滤器里边,要执行这个代码之前先执行什么过滤器中的东西,能理解吧,好了,那这样的话呢,这个最终资源我就写完了,来怎么写过滤器我建个包,这个包呢,我给起名叫什么filter,你怎么对待人家的,你就怎么对待人家就行了,明白吧,这边呢,咱们起个名吧,这个起个名叫什么叫FILTER1。
42:13
大家编写的时候实现一个接口叫什么接口接口对吧,但是现如今我们不是是什么filter,你是filter的话,实现哪个接口你看。这个。这个啊,加了X的包,下面个filter,来OK行了吧,来OK,大家看里面有几个方法,这个方法应该感觉很熟悉啊。是吧?是不是很熟悉吗?排下队吧,排个队啊,我放到下面行了好了。这有个什么do filter,这个方法相当于我们survey的哪个方法呀,Service。
43:06
隐匿的吧,你出吧,我就不讲生命周期,你也理解。这个对象是单立的吗?是单立的啊,另外这个对象那个隐匿的方法什么时候执行。计算怎么执行?这个执行几次,这个呢,这个呢,这是一样呗,这都你看我不说了吗?跟跟原先你写的时一样,这叫什么组件,叫filter组件过滤器啊,那么接下来呢,你写这个东西怎么写,往这写来输出叫什么filter e begin点点点好了,再来一个叫future e begin点点点行了好了行了啊写完了,那么接下来这个类要想执行配配不配啊。配进去怎么配,看好了啊配了啊,这叫什么组件啊,组件吗?怎么配啊。
44:07
这叫这叫什么filter filter对吧,这叫什么mapping mapping里边的name加一个什么。你如果这个过滤器想过滤这个类,你就把这个路径。粘到这儿。将来你只要是发动这个路径,底层就会先找这个路径所对应的过滤器,如果没有过滤器才会轮到它。但是这个事是谁做的呀,是com cat做的啊,咱不用管,咱的任务是只要写一个类是就可以了,然后把这个类配到什么配置文件中,是不是就行了,就这么简单了,所以这边我要说上去啊。同样一个请求路径,同样一个请求路径,Filter的优先级高于black。
45:16
行吧,这边那我就还我我写个一行吧,这边我写个什么推一吧,这个类名怎么写,你还是最好不要写啊,从这边复制吧。你写的有可能出错了啊,来,贴过来。然后这边叫什么一是吧,拿过来放到这就行了,点啊好了完成了。来我们试试看会不会是加断点行吗?加断点行吗?走啊加断点啊加断点,好,我们一起研究一下这个会不会执行。你看它会执行吗?啊,确实会吗?试试点它,点它添加走走1OK,把服务器启动。我们来看一看,现在打开网页之后是访问A对吧。
46:03
当我们发送A请求的时候,底层配置文件中既有一个A,下边还有一个A,到底是走这个A还是走这个A呢?我们测一下就知道了。这怎么写这个?这IP是多少,这个IP。127.0.0.1端口号八零,端口杠后边叫FILTER1,欢迎进店吧。是吧,点了啊,我点了啊,我点这个走。诶,你看先走的谁呀,这个吧,你看啊,往下走输出了吧,来往下走输出了吧,哎,你看结束了。是吧,这个类是不是没执行。这个类没执行啊。
47:00
这个没输出啊,哎,很简单啊,因为那个链条断了。在这有个过滤器,在这儿有一个serve light在这儿有一个serve light在这儿呢,还有一个在这儿,还有一个在这,还有一个在这还有一个我们说了走这个,先走这个通过发分发分发分发分发执行这个东西是吧?现在是不是只执行这个呀,这个是不是都没有执行。这是什么原因,这断了。明白吧,为什么会断了呢?因为你忘了调一个方法。这个单词翻译过来叫链条。明白吧,这是链条啊,来,我们不要让它断啊,不要让它断,来加上执行下一个过滤器,如果下面没有什么过滤器的,则执行最终的什么serve light资源啊,Che Che啊,这个名字你最好不要改啊,很形象叫趁趁点什么do,请将request和response必须传下去,因为这是几次请求一次。
48:14
明白吧,好了,那么接下来我再试试啊,那这个做点吧。试一下啊,来回退回退刷新之后我点了啊走。还是那句话吧,来,往下走啊,到这了吧,他会走这儿吗?不会,他是走下一个资源啊,下一个资源是谁。下边有过滤器吗?没有吧。你想你在配置文件中指定的下一个资源,你在配置文件里边指定的下一个资源是什么,这个路径和这个路径一样,那下一个资源是这个吧,所以这个时候你就就走了啊,来试试看他会走会不会走,走下一端点走。
49:01
是这个吧,来再往下走,输出再往下走,哎,这个结束呢。这个结束之后,就相当于哪句话结束了。第27行吧,所以我点下个断点,你看到哪了。是不是到这儿呢?好,请问这是什么阶段?这是响应阶段还是请求阶段?从这个光标开始,到这个这结束,这属于什么阶段?这是请求还是响应?Serve light执行之前叫请求吧,Serve这边执行代码结束之后,这叫什么了?响应了吧,所以这个过滤器是既能过滤请求,也能过滤响应对吧,上面是对什么进行过滤请求,这是过滤的什么响应,所以。它是一个双刃的什么意思?这个过滤器它是起两个作用。
50:02
这是个future吧?这个叫filter啊,这个来吧,它是从这开始往这发了吧,是不是过一次啊,你别忘了这个会结束吗。这叫请求吗?结束之后开始响应吧,你看看响应的时候经过吗?所以这个过滤器既过滤什么请求,也过滤什么响应,所以你要记住啊,在这一句话之上写的程序,我们叫过滤什么对请求代码,对请求进行预先过滤啊,预先过滤,然后这个是对什么,对响应啊,对响应过程进行过滤。所以这个代码写的位置不一样。最终呢,过滤的效果也不同,在这句话的下边就是过滤响应,在这句话的上面就是过滤请求,好,大家想一想。
51:04
为什么这个地方得调,趁着do filter,为什么我们不能直接把这个S对象new出来,然后我们自己去调,为什么?这句话的意思是面上呢,它是往下走一个资源嘛,执行下一个资源要按说的话,其实我们是不是也可以把这个对象扭出来,然后自己去调一个读改的方法吧,是这意思吧。就是要写的话是不是也行,但是要注意我们说过了,这个对象我们有成有权利去创建吗?没有,所以说我们这句话只能只是在告诉谁。我们这句话只是在告诉那个汤K的服务器说我们下一个资源要执行了,你帮助我们去创建对象,然后去调方法就行了,我们成学的任务只要写上这句话就可以了。明白我意思吧,其实跟原先那个叫什么request点什么,有个方法叫get requestpa点二什么forward是不是一样的,这个和这个区别就在于这个是用在过滤器里边的。
52:10
明白吧?我强调一下啊,这句话的意思就表示执行下一个过滤器,如果下边没有过滤器,就执行最终的资源。过滤器的优先级要比它。比他的业绩高。过滤器既过滤请求也过滤什么响应,在这句话前面叫过滤请求,在这句话后边叫过滤响应啊好,那这块呢,我再写一个啊,咱们再写一个,再休息啊,再写一个过滤器这边我再加一个,加个二行吗。这不理解时间点接口啊,这个吧,Finish是啊,排下队吧,往前放放啊,这是一,这是二,这是最终资源二这边呢,这样吧,我把一呢复制一下ctrl a全景CTRLC复制CTRLV接过来把一改成二行吧,这边改成什么二啊这改成什么二吧?好大家看一看这个呢。
53:02
这个过滤器如果配进去呢?嗯。这个过滤器我配进去了,路径还是这个路径吗?只不过这个改成什么?二吧二吧,这个都改成二啊,这个都改成二行吧,好,这是几个过滤器啊,同一个路径吧,是不是同一个路径啊,好,那么接下来想一想,我如果发一个A的话。他应该是先执行FILTER1呢。还是FILTER2呢?反正轮不到他。是吧,肯定是这两个其中一个吧。哎,这个东西咱们测一下啊,看一看,我测一下,把这个关了吧,再重新给它。部署吧,我保险起见啊,给他部署一下,然后我把服务器干什么呀,提一下这边我断点设一下啊呃哪呢哪哪加断点啊,我加几个123加跑了啊,所以我都加了啊,怕他跑了来。
54:08
加上,在这加上吧,每一行我都加上断点。我加了八个端点吧,我看先走哪个啊。回退刷新点。一吧,你看啊,走吧。这句话啥意思啊?走下一个过滤器吧,那我走了啊走,哎,你看果然到二了吧,二走吧,来走。这个到哪了?哎,你看走这不到头来了吗?来,往下走,走这上结束呢,结束到哪了?到一还是二,到二了啊二这边结束之后到哪了?到一了吗?是不是这样啊,结束了,这就结束了。
55:04
你看是这样的。你看这是FILTER1。这是FILTER2吧,在这两行代码上面是过滤什么请求吧,在这两行代码下面的过滤什么响应吧,过滤请求对请求过滤对响应过滤。所以这是个站吗?是个赞吗?谁最先进去,谁最后出去的,先进后出嘛,最先进在底部吗?这是过滤器一吗?然后这是过滤器什么二吧,然后这是个最终的资源吧,好,我问你谁是最最后掉的。这个是不是最后掉的,但是它最先结束对吗。
56:02
你这是最先结束的呀。最先结束的就是它。他是最后掉的,最先结束,它是最先掉到最后结束。这是个站啊。凭什么先执行一呀,是吧。走一下子。我把一的future map放到下面。我只是把mapping放到下面了。我只是将mapping放到下边了啊。试试。我这八个端点还在吧,在啊试试啊,回退刷新点。二了吧,走走的呀。搜一。
57:01
一再走吧,走谁呀?So let,往下走吧,再往下走吧,走到哪啊?一,一走完走谁啊二。二结束就结束了吧,所以这回先掉的是谁F2。最后结字是谁?矮胖,是个战马。先进后出嘛,所以说这边我标上去啊,讲个这个知识点语法啊,这个语法我说一下后退啊撤销一下。嗯,好,这边呢,我写上这个filter mapping的顺序决定了什么filter的优先级,对吧,Mapping标签在外部。第二。S文,S文件中有。外B点文件中的位置啊,越靠上。
58:11
优先级越高行吧,Filter mapping标签的顺序啊,Filter mapping标签的顺序一定要注意一个事啊。跟这个比有关系吗?没有啊,跟这个没关系,所以这个顺序顺序是决定的,好了,咱们第一节课就先到这啊。
我来说两句