00:00
嗯,好了,我们刚刚已经对这种B的一些呃呃一些执行顺序执行了分析,那么接下来我们来开始对我们这个in和并impact的一些呃代码进行一些解释,因为有了前面的一些基础,才能看到我这建的一些类啊来各位同学看这个并包括下面就会有这么一些类,为什么会有这么多类呢?这些类呢,分为不同的来源,不同的一个,呃呃类型啊,不同的,反正各式各样的,我们来看一下,来第一个看A啊,我这里画了一幅图,你先听,你听完之后再看这幅图就能看懂啊来我们来看AA的话呢,就是什么啊,它是直接实现了负类的,所以到时候如果A并且它是通过注解来加入进来的,所以A呢,如果到时候被反射,不不是被反,就被回调执行的时候,他打印的一个打的是名字,所以是A,它类型呢,我写了个P表示po的,就是他是一个直接实现了类的啊好方法,就当前这个方法,它执行的是这个post,这并发的方法,它的来源呢,就是这个A是怎么被spring识别到的呢?它是通过注解,也是通过扫描扫描到的,这是A,好,我们再来看B啊,B的话呢,就是B。
01:01
没有加art component, 但他是直接实现了负类的,然后他的名字呢,这个B类型的话,它也是一个直接实现了负类的,但方法呢,就是也是这个方法,只不过它的来源呢是从API提供的,因为这个B的话,如果我们能够让要让spring知道他的话,必须要通过API提供给他,也就是通过这种方式的,我们在这里应该有有有写吧,在这里来就是把这个B呢6出来,只是通过API给到他,那么10分钟也能使得和扫描的话呢,就是基本上是差不多的啊,就是呃嗯,就是能够达到同样的效果,好再来看CC的话,就比较复杂,它是一个实现的怎么样呢?子类的,那么你一旦实现子类的话,首先也要重写父类当中的这个方法来这个方法,然后呢,还要重写子类当中的这个方法,所以它重写两个方法,然后我们来看一下CC的话,来看看现在看它的复类方法啊,复类方法里面的名字叫做C,这个类型叫C类型的话,它是个S表示达这个子类嘛,Sub嘛,就是子类好它的方法的话呢,就是这个POS的啊,那么我们在这个POS前面给它加一个P吧,来杠,P表示它是一个负类方法,那么这个加一个S杠啊,那这样子啊S。
02:00
S杠,那么它是子类的方法啊,这个是P之前的负类的方法,来源的话呢,由于我们这个C端没有通过怎么注解啊去扫描,所以他只能通过API提供,所以说我们这个地方也把C给提供进去了,通过什么呢?呃,溜了个C把它给到我们的spring对吧?嗯。然后的话,我们再来看DD的话呢,就是叫做它也是一个子类了,它是子类,只不过呢,它跟C的区别在于说它是通过什么样的扫描,扫描进来能够扫描到的,然后的话,这里也给他加一个就是S的方法,就是子类方法,然后的话这个是负类方法,P杠啊,这个是负类方法,然后它类型是D吗?啊啊不是,名字是D,类型是S,注来源就是注解啊,通过注解能够查到的。好我们再来看1 1的话呢,它是跟这个A,呃呃,有一点一模一样的,为什么一模一样的,就是我要为了让大家你们能够看的更加的清晰的,我们做了两个一模一样的,所以A跟1是一模一样的,都是什么样负类,然后的话都是通过API来的,所以这个A跟1没什么好说的,FF的话呢,它其实最主要的一个呃,功能的话,它其实应该是跟我们这个第一次一样的,就是通过什么样呢,通过注解可以呃拿到的啊,他有通过注解可以,因为它也是什么啊一个子类,你看它实现的值,它跟。
03:06
D是一样的,D也是直线指令嘛,只不过F呢,他多了一个功能就是F,你看我们的D在回调它的指类方法的时候的话呢,他只是打印了一下,没有干什么事情,而我们的F呢,在回调他的子类方法的时候,他做了一个事情,你看他回调的名字是F对不对,类型是S,方法是S子类的这个方法,好了,这里是负类这个方法啊看啊,然后的话呢,呃,只不过他在回调子类方法的时候呢,他做了一个事情,他做了什么事情呢?我们刚刚讲他呢,去在这个方法里面呢,实例化了一个J这个类的一个并DEF,就把这个J这个类变成了一个并in definence, 然后呢,把这个J呢,怎么样呢,注册到了我们这个并in def map当中去了,好,所以大概这个意思,他就做完了他的事情,于是我们再来看JJ的话,它是什么,没有被扫描的,对不对?但是他也没也没有动态提供给我们的spring,那么他怎么被spring人感知到的,也没有通过API提供啊,那么他是怎么被spring人感到的,他是通过F注册进来的了,通过F注册进来的,所以这个J到时候也能够被spring识别到。好这些说完了,我们再来看HH的话,它其实跟我们前面的F都差不多,是跟这个什么D的都差不多,只不过呢,呃,跟这些A啊差不多的,它是通过什么呢?啊呃,扫描能够扫描到,只不过呢,H它实现了一个pretty all的接口,然后呢,它再回返回是0,好I的话跟H差不多,只过它是子类的,所以这个地方我们给它加一个负类的啊,P杠表示它是负类方法。
04:21
啊,它的类型也是PP-po po角度,它是一个什么po order的接口,就是它是实现了order的接口的,那它类型是实现了的接口的,从这里要看出来啊,那么的话呢,我们的I的话,那么就是什么它是实现了子类的,所以它的类型是S-po,它也是什么,它是子类类型,并且实现了这个pretty order的接口的,那么它的返回值也是0,然后的话,这里给他加一个P啊,就是表示它是一个负类方法,然后这个是S啊指类方法,然后就是这样子,它的来源都是通过通过注解可以扫描到的啊啊K的话我们就不去看了啊,然后我把代码再改一下,就是让整个看起来更加那个一下。是P杠,他是他啊。啊,B的话这里是。P杠。
05:00
表示复类方法C的话,这个已经改过来了,还有一个一没有改,一给他改一下。OK, 好了,有了这么多种类型在这个地方,总之呢,这里的ABCDEFGHI,他们都是属于。叫做什么并factor possible, 只不过他们一个是直接实现了负类,一个是怎么实现的,是子类对吧?这个图当中呢,就是什么呢来描述这个类型呢?描述他们之间的关系,什么关系呢?我们首先来看AA,它是这个颜色的表示,它是什么呢?直接实现了这个b post设置的,它是在这个黄色框框里面表示,它是什么呢?注解提供的,我们来看一下A是不是就能够被扫描到的来,能够被扫描到的,好B呢,它呢也是这个的,就说白了,它也是属于直接实现了负类的,我们可以看这里就看出来了,直接实现负类的,然后它通过API提供的,我们来看一下是不是的,B的话肯定没有加注解,它肯定是通过什么API提供的,出现一个B,我们再来看CC的话,它是这种,这个颜色叫绿色还是蓝色,我也不太清楚,反正是这种颜色,这个颜色表示它是实现的是子类,那C的话实现的是子类,并且呢,C呢肯定没有被扫描,对不对,你看C是谁现的子类,但是C呢没有被扫描,所以C呢是通过API提供的,这有了一个C,好,我们再来看DD的话,它是子类啊,来看一下D是不是子类的,D没错,是子类,然后我们来看第一放到这个里面表示它是通过什么呢?注解能够被扫描到的,所以D1的话加了一个other comp, 它能够直接被spring识别到,好,然后我们再来看第一,我们看这个图上一一呢,它是放在这面跟A一样的,我们刚刚解释过了,你看就是一模一样的,A的话能够被spring扫描到,对,在这个里面能够被扫描的注意提供的嘛,而且呢,它是属于属于负联,它是跟A一样的啊啊,这个没什么很大的,我们看F直接看。
06:38
情惯F的话,它是一个子类,应该首先,然后它是通过什描样的注解提供的,应该它能够被直接使分给以扫描到,我们来看一下F是不是来F它就是什么子类,并且能够被什不直接什么扫描到,好我们再来看JJ的话,我这里写了一个,呃,那个它是它首先是一个子类的,从这个颜色可以看出来J是一个子类,只不过它特殊的点的话,它是怎么样,它是通过F注册进来的,它不是通过spring扫描出来的,那我们可以看到这个J的话,它是能个通过什么样呢?F给它怎么样通过在这个地方注射进来的,所以J的话,如果说你把这条代码注册的话,J是什么不生效的啊,所以这个意思,所以这个里面放的是什么,通过注解提供或者通过b def来动态添加的,所以这个就是这个来建好ABCDFJH,我们再来看从图上看H它首先是一个负类,然后它实现了这个order的接口,我们来看一下是不是H首先是一个负类,然后实现了order的接口来,是不是实现了的接口,好,再来看ii的话,那么从图上看也是一样,I就是一个子类实现了all的接口,I啊,子类实现了all的接口,那这是这个图上的这些东西,那么为什么要做这样子的话呢?各位同学注意,听我们讲了这么多是为了干嘛呢?
07:38
是为了研究ABC def fg h hi jv他们的执行顺序,因为各位同学注意听了你这些ABCDEFFG都是属于并factor port是不是,那么是不能底层究竟先执行谁呢?先执行ABCDEFF,基本先执行A吗?按照我们刚刚说法的是有order的,肯定先执行order对不对?但是这两个都有,这I和H他们都有pretty order的,只不过一个是负类,一个是子类,那么先执行A还是先执行H呢?而且呢,我们再来看这个东西呢,比如说我们这里的这个BA跟A,他们俩都是实现了负类,看这个图对不对,他们都是实现了负类嘛,那么先执行B还直接执行A呢?按照Spring的一个命名顺序规则的话,那么肯定是先执行A,对不对,因为A的顺序越高嘛,命名顺序,但是呢,他们由于呢来源不同,一个是通过API提供的,一个是通过注解扫描到的,那么是不论先执行A提供的,还是先执行我们的这个,呃,注解提供的呢,都要研究,而且你自己来看呢,在四不论当中,ABCDFG对不对?究竟是先执行子类的子类方法,还是先执行负类的负类方法呢?
08:38
所以先到1万的就是这样子,你这里ABCDFG是不论是先执行直接实现了负类的这种,就先执行这种灰色类型,还是先执行这种绿色类型的呢?先先就是spring是先是执行,呃呃,直接实现了负类的还是执行执行指类的呢,这个不知道。因为这两种都是对不对,就假设你现在是份作者,你拿到这么多类,你怎么执行呢?你是先执行,就是假如是我对不对,我可能会去先把所有实现了子类的这些找出来对不对,然后再去排序对不对,是不是要有个顺序,好这个我们要去看圆码,所以说我们要借这些类,我们来验证这个说法,好还有第二个来,你仔细看看这个A和这个F里面都有一个方法叫做post process发方法来和这个A。
09:22
是不是都有一个方法,为什么呢?因为A是直接实现了负类当中重写的这个方法,而我们的F呢,或者其他类呢,它是由于实现了子类当中的间接的,怎么样呢去实现了负类的这个方法,那么这两种,这两种方法,这个post factor它是不是有两种类型,一种是直接实现负类的,一种是通过子类实现的,那么这两个方法的执行顺序该由哪个为先呢?这些都要去看10份源码怎么写的,所以说我们先把这个类给的建全来,而且这里面还有一个非常非常重要的,我们需要修改10份源码,先给大家说清楚了,是这样子啊,这里有一个叫CCPP的类,这个CCPP类是谁呢?我们说过来整个这个方法in work并post的方法的在这里啊,Reresh方法的在这里,就是因用和be possible, 它是用来执行当前是spring容器当中所有的be possible process, 那么所有的be possible process呢,从大体的来源上来讲,它应该分为两项,一种是程序员提供的,无论你是注解还是动态注册的啦,啊,无论是这种注册的还是注解提供的,还是说你是API提供的。
10:27
都我们可以称之为程序员给的,对不对,就是你给的嘛,那么还有一种呢,是spring内置的。那么s spring类他你自己有内置的一些B方的post,那么它的顺序是要高于你的,还是说你的要高于他的呢?那么这个也要研究,所以说我们要找一个s spring内置的,那就是我们前面讲的这个s spring当中最重要的类,叫做con class for先就是它了,它它里面是不是也有一个子类方法跟复类法,因为这个类啊,它是直接实现了此类的啊来。你看它是直接实现的子类的,所以我们把它解析成CCPP啊为什么呢?因为呢,这个类的话,它的名字太长了,CCPP, 并且呢,这个类呢,它是实现了什么呢?Pretty all的接口的,来你看它实现了pretty,我们也给他写一下好吧。
11:11
啊,这样子CCPP啊,我把它放到这里是属于什么类志的,那么呢,我们要去给他加加日志,因为为什么,因为没有日志,你怎么能看到执行顺序呢,怎么加呢,首先找他的子类方法,子类方法的话就是呃。这个方法了,这里我不用日志吧,因为用日志的话,这个spring它这里有个日志,我们这里面就直接用这什么out land打印一下,这个属于C啊,我们把那个直接复制过来了,呃,跟它一样。为了方便,等一下看。诶放在这里啊好,它的名字是谁呢?CCPP, 呃,它并且是实现了po的接口啊,我们就写CPP吧,好吧,类型它是属于实现子类的方法呢,是S子类方法的这个方法XC方法是子类的对不对?好来源的话它是怎么样呢?类似的。
12:08
呃,然后的话呢,嗯,还有一个负类方法,那么这里面我们也是用C0奥0这个打印一下。哦。CTRLCCTRLV复制一下。这个就是CCPP,它的类型是S方法是什么东西啊,负类的这个方法。披盖。好,它的来源也是内置的,好了,这样就改完了,那么其他内置的我们就不用管了,因为我们只需要找到一个内置,其他内置的话呢,Spring其实内置的话,如果说看版本不同吧,这里面我们先只关心这一个好吧,那这样子我们就把这个呃环境介绍完了,下面我们来进行这个呃一个代码的讲解。
我来说两句