00:01
下,呃,我们刚刚啊讲完了这里啊,然后到了这行代码,呃,到这行代码之前,我们先来看一下目前我们这些绿色的哪些执行完了啊,我们讲它的子类方法啊。呃,他的执行方法执行完了,他的也执行完了,然后他的也执行完了,那么剩下的就是啊。他们两个要看他是不怎么把它找出来的啊,嗯,你看它这里首先定义那个变量叫做呃。这个变量只为true而默认啊,嗯,然后呢,While true这里面其实你会发觉整个这个一并possible是它的代码写的比较的,嗯,蛋疼啊,你看他上这里就是去找嘛,来我给大家简单的看一下来。啊,你看找找到之后的话,这个代码是呃,执行好,然后下面又来找,找到之后的话,一样的代码的执行,然后这个地方又开始找,找到之后的话又去执行的,你看是一样的,为什么他要这么做啊,那其实一个大的一个原则就是他为了把所有的代码都去执行完,就把所有的一些呃,那些绿色的就是那些类都执行完,因为他是分批执行吧,所以说我这个上面做的这个笔记的话,叫做分批,分批一直在强调这个东西,我不知道大家现在理解的所谓的分批执行吧,还是那句话,他们因为做不到一起执行,所以spring用的这种代码的话,一些重复的代码不断的去找,不断的去执行,不断的去去找,不断的去执行,这样子啊,那么目前来讲已经找完了第二批对不对,好了,然后的话,第三批当会还有第四批第5批,那么第4批第五批第6批这样子了,那么他为什么就没有去,呃,就下面这一行代码就解决了呢?就也不是一行嘛,就一个逻辑就解决了,而不是说啊不断的去写了,这是因为呢,他这里用了一个y u two这么一个循环不断的去找,那么前面为什么不用y u two呢?我们来看一下这个y u two你就知道了。
01:42
首先well two啊,然后的话呢,呃,Well two之后上来就给它变为一个force,就是说我的一个呃,原则是呃就只执行一遍,那么呃,如果下面条件发生了变化,就是我会让这个行第二遍,就是原则上来讲,我的while的话,先执行第一遍,就第一一第一遍一定会执行好,执行执行完第一遍之后的话,那么看你们的这些条件,如果还有的话,那就要执行第二遍,他的一个大概原则是这样子,那么为什么那么设计的话呢?呃,我们来看吧,来,呃,呃首先等待force,那么也就是说表示说呃,如果这个值不改的话,那么他只会执行一遍,好,然后再次去找他说呃还能不能找到呢?那么这样一找的话,同样也会找出来几个呢,呃。
02:21
写个注释吧,嗯,就是说这里面同样会找出来四个对吧,还是这四个CCPP,这个我们前面讲的啊,因为还是一样的找嘛,然后的话D1啊,还有一什么呢?是F和I对不对,还是会找出这四个来,等一下我们可以断点来看是不是这样子啊,好找出这四个来之后的话,再次便利,那么这个时候的话,第一个CCPP它是不包含在里面的,所以不用管,第二个的话,第一的话在不在里面的,第一是呃呃呃,这CCPP是包含在里面的,所以这个if服不会进,那么第一呢,不包含在这个里面,不包含在这个里面的话,那么我们这个color当中的话,就会有一个D,它会把它放进来,那么D的话把它count c卡就会放到这个当中。嗯,在这里好,然后的话呢,再去把这个东西要放到这个D当中去,也就是说这个里面会多一个D,他就是C位。
03:06
字符串啊是D。他。这个图画小了,还要再画大一点的。嗯,好了,然后的话呢,就把它作为处,那么为什么这个地方要置为处呢。呃,我先把这个先给它删掉吧,我们等一下再来写注释吧,呃,这个错的话就表示他会去怎么样的执行第二遍啊。好,所以说我们把这个问题提出来啊,就是什么问题呢,就是说为什么。为什么这个if成立对不对,也就是说呢,这个if成立表示说什么啊有就为什么这个if成立表示说有需要执行的。叫做。嗯,Bining possible就是有比第一是不是属于一个bining,如果说这个隐服不会进的话,那这个呃,Color里面什么都没有,那就表示说就不会有这个引卧和这个就这个隐卧,他就是这个空循环嘛,也是不会去执行嘛,那么一旦进到这个if服里面,他做的事情就是往往这个list里面添加一个,添加一个将来去执行对不对,所以说这个if的意义就是说。
04:13
有需要执行的就会。执行第二遍。好,这个问题就在这个地方,这里面的可能同学听不懂,你把这个视频暂停一下,往前再倒个一分钟,再来听一下,把这里搞懂,你明白我在说什么,我再说一遍,是这样子啊,就是你想一下来,他这个是个外网循环,那么一上来他会告诉你我不会执行第二遍,然后呢,开始来找所有的BDS,也就是你possible的设,那么找到了4个,找到4个的话,有可能都不要执行,有可能都要执行,有可能有些执行,有些不要执行,那么只要找到里面有一个需要执行的,那么我就会要执行第二遍,是这个意思,他是那么为什么呢,要执行第二遍呢?这个先不用管,我们接着往下来看啊,好,Y要去的,然后的话就给他变成去,变成去之后的话,代码接着往下执行,那么这个里面我们已经简得做了比多了个低,对不对哈,代码接的执行,因为这个for循环没有结束嘛,好第二遍循环,那么拿到我们这个FF肯定也是需要执行的,好F1F也不是执行,F肯定是也会进这个if的,对不对?进这个if,那么这里面多了一个F,我们把这个F同样也给他拿过来啊。
05:19
放到这个里面。好,F拿过来之后的话,同样这个F呢,会把它记录一下,表示他已经找到了,放到这个里面,所以这里面多了一个F。F啊,好,然后再接着往下执行,同样它还是变后true,好,那么再次循环拿到这个ii的话呢,它是什么呀?不会进这个if了,因为I已经在前面已执行过了,这上面那个地面,所以这个if里面,这个里面就包含了I,那么这个一看的话就是一个force啊,整个这个就是个force,那么就不会进,好不会进的话,这个for循环就终止了,终止了之后的话,对他们俩进行排序,就是我们的什么来呢?呃,我们的D和F他们俩一排序的话,就是按照自动排序,排了之后还是DF,除非里面有特殊的一些呃呃,排序规则,那么这里面就没有的话就是DF,这样排,排完之后的话,把它放到里面还是一样的道理,就是为了去执行D和F的负类方法,所以他们要先记录一下,要缓存一下,所以这里面会多了一个D和F在这个里面来。
06:11
呃,直接CTRLCCTRL位复制一下,把它拉过来啊。我们为了把这个图更好看,就是把它画整齐一点。这个好好好,挺难画的啊,那就算了吧,随便调一下就差不多了。好了。哎。不去调了啊。就这样吧,好多了一个DF啊,然后的话呢,嗯,代码接着往下执行,就开始了in work, 并post了test斯特,那么这个时候执行过来这个list的话,那么它里面就会有两个,呃,就是什么D和F对象对吧?呃,他们俩一旦执行,那么D1的话就是简单打印,但是F的F去执行这个我们来看一下,他就会又做了一件事情,做了一个什么事情呢?就是往我们这里面注册了一个J对不对?好,如果说,所以说F一旦执行完的话,这里面会多一个G。
07:20
这个就是什么这。大写的这样啊,那么这个地方我们对这个J呢进行一个说明,这个J是怎么来的呢?它是通过就是什么。啊,不会被扫描。它是什么呢?它是从通过执行F。动态添加。到这个map当中的啊,他是这样来的这个J,所以说我们在F一旦执行完的话,这个并DS map当中应该会多了一个J的这么一个b defs啊在这个里边。这是3点多例好了,呃,然后的话呢,就没了,呃,这F就执行完了,那么D和F就执行完了,执行完了之后的话,然后就把这个呃可能也清除,那么他就给清除完了,所以说。
08:06
这个这个讲到已经没有了,我这里先不删了,到时候我们来调试的时候就删了,然后的话呢,这个for循环结束了,对不对,这个while循环结束了,那么这个时候while又while,它它是多少呢?这个时候它会触好他又来了true好这个地方,所以我们来解释一下为什么需就是有需要执行的这个be def possible, 他会要执行第二遍,其实很简单,这个地方就涉及到了一个be different possible, 它的一个意义啊,我把它写到这个地方来。它的意义是什么东西啊,它是属于,呃,因为它是继承的并factory possible特色,对不对,继承了我们这个b factory possible特色。他是继承他的,所以我们说这种be defsity DS啊,它是继承了他,所以说我们说这种be defing possible的,这说他呢,也是一个工厂后置处理器,也就说他能够对我们整个的spring并容器,或者我们的spring的并工厂进行一些什么全局的设定啊,或者是一些个性化的一些东西啊,个性化的啊,那么它主要是它主要的作用是这个对不对?好,既然它有它主要的作用是这个东西的话,那么如果我们如果啊。
09:14
如果去执行一个并inity possible system, 那么可能可能会发生什么事情呢?可能呢,会发生对容器或者对整个工厂。啊的进行呃设置呃呃对整个逻辑进行有有什么有一些特殊的设置,好比如说其中有一个设置就是怎么样呢网。容器当中添加了一些in defence BD, 我简单写一个BD啊,所以。需要。这个字变成true。啊,那为什么要把它变成出来,因为你动态添加的。
10:01
BD对不对,有可能是一个being possible.过。需要再次查找。然后执行,这就是我写这个F的意义,来各位同学看一下。因为你在这个地方,我们说了这个代码其实是找的是怎么样呢?就这个这个Y要去第一遍执行的,他肯定是找这些什么样呢?被扫描出来的哪个来我们的DR啊DR啊F法和I对不对?好那么呢,他找到了一个,比如说他找到一个之后,他去执行,他找到了一个之后,他肯定将来比如找到一个会记住这个if服对不对,他只要找到一个进入这个if服,那么他将来必然会去执行,找到了这个在这里,将来去执行嘛,那么如果说你将来如果执行的话,他会不会可能发生说比如说我这里找了个F,这个F会不会往这个龙量中动态添加一些并defin啊,刚好添加了这个并DEF,又是一个这种绿色的这种子类的,那么这种子类的你也要执行啊,所以我又要找一遍Y要处好这个点你明白吗?如果你想一下没有这个Y要处,那比如说你你不写这个Y去,你就再找一遍,就没有这个Y去再找一遍,找出来一个F对不对?
11:14
啊,找出F之后,F执行完了之后的话,那你就完了嘛,你肯定还要,那你这个代码要重复写对不对,那你越写一个代码,因为F有可能提现新的,所以你把这个代码又复制一遍,又放到这里来执行,那么你执行的时候,你执行这个J对不对,你有没有,你不能保证这个J没有动态添加一些,所以你这个代码没完没了,就一直要去找,一直要去找,于是人家斯不论做法是用了一个for循环,他不用了一个while循环,While循环直到。找不到了为止,因为这个类它比较特殊,它是一个be differently possible设置,它是一个工厂出后置处理器,它能够动态的往我们这个工厂里面去做一些个性或设置,比如说添加一些b def, 修改一些b def等等之类的,那么你无论添加了还是修改了,我都要去怎么样呢?看一下你有没有添加新的病,Possible这些类型的病,如果添加的话,那么我要怎么样呢?再次去找,再次把他们找出来,出执行,所以说一旦找到一个需要被执行的并w just possible, 那么我就可能要去执行第二遍,我要出。
12:15
啊,就是要把这个呃,不要把这个呃改成错码,让他执行第二遍while嘛,那么再去看一下你有没有添加好回到我们的代码的话,那么呢,这个代码里面的话,呃执行完了之后的话,那么第二遍来执行a while对不对,这个时候还是while去嘛,While去的话,那么这个时候一找的话,那么找出来几个呢?这是第二遍啊,第二遍while的时候找出来几个,同样是四个,加一个什么动态的一个J在里面,是不是多了一个J,多了一个J之后的话,那么他开始来编利,编利的话,前四个由于都在这个process里面,我们来看一下这个process里面是不是包含了这四个,我们这个图不是记录了吗?你看CCPBIIDF是不是都在这个里面,所以说前4个都不会进衣服,直到第5个J好进到这个里,进到这个if服当中来了。进到衣服当中的话,就把这个J放到这个卡当中来,所以这个里面会多了一个J,就是第二遍的时候对不对,我这里就不去画了啊,因为这个地方我们没没没没有去把它清除,其实讲到理这里面应该会有一个诶。
13:04
Ctrl c ctrl way啊,这里面会有一个J对不对,是这样子吧,啊好,然后呢,我要开始来直把这个J呢,也放到这个当中去,所以说这个里面会多了一个J。啊,多了一个接之后的话,然后的话代码接着往下执行。好代码接着往下执行,执行的时候的话呢,那么这个时候他还是要变回,为什么这个时候还要变回出来,因为站在斯图作者的角度或者这个角度而言,在这个时候的话,他不知道这个J干了什么事情,他还没有去执行这个接在这个执行对不对,他不知道这个J干了什么事情,因为有可能这个J他还会去动态,你在这里面再去添加一个什么J是不是可以,诶你就是复制F的代码对不对,你看把这个代码复制过来,把这个J改为一个Z,那么有可能这个J的话,会在这里面再去添加一个Z,所以说spring的作者的想法就是说啊,我先把它变为去再循环一遍再说好了,然后的话就怎么样开始去执行接接执行完了之后有没有作者添加呢?没有好,然后的话肯定要清楚,清楚之后的话,再次,因为这个是true嘛,然后他后来再次判断while还是true,那么再来执行,那么这个时候第4遍一找的话,那么找出来的话,第三遍这个时候他这里会进3遍啊,那么第三遍还是这4个,因为没有做到添加嘛,好这4个的话去做这个if判断的话呢,它是都不会进,都不会进的话,那么这个值接为force好了就执行完了,执行完了之后的话再是while while的。
14:27
就是这个时候是force,那么第5第4次的就不会进了,不会进的外循环,外循环结束,结束之后的话,到下面来啊,就嗯,就就这个代码就讲到这里面,然后下面的代码我们才再来说好了,这个代码就到此为止,是不是他就把所有的什么我们说一下这个地方啊,就是所有的什么直接。实现了。子类的那个什么样的,那些什么样的啊对象啊的子类方法,这个子类方法就是这个方法,Post process并differentsity方法,这个方法全部执行完了,就是也就是我们图上画的这些所有的这个绿色的他们当中的那个子类方法全部执行完。
15:09
到此为止啊,这样子就没有漏网之鱼了,已经啊好,所以所以说这就是他写这个外网去的一个循环的意义,在这个地方,不知道你们有没有看懂啊,就是为什么这个代码会有三个对不对啊,我们来解释一下,第一个的话,就是为了去,嗯嗯嗯,第一个是不不可避免的,对不对,你你总要去找对不对,第一个好理解,就是你总归得去找嘛,你不找怎么把它实例化呢?就是我们前面讲的你这个代码啊,如果想要去,呃执行的话,你这个对象是不是,你这个得是一个对一个实例化的一个对象,对不对,我还特意前面就讲了,他必须是个对象,那么你是个对象的话,那站在十分角度的话。通过API调用的,那就不需要去找,因为通过API调用的话,他要求你就直接给到一个对象,这个能理解吗?你看他这个connect a d PB factor port下,人家需要的就是一个对象,一个实际化好的对象,所以说通过API调用的,它是不需要去找的,不需要去找出来,去实际化的,因为他就是需要的对象,所以通过API调用的什么,通过API给到的是最简单的,于是呢,Spring最开始就把它拿出来,因为它最简单,你直接给到我对象给我了,并且我都把它保存历史当中,那我就把它拿出来直接怎么样呢?执行吧,好,如果不能执行的,比如说你提供的是负类,那么我先把你缓存起来嘛,就放在这个RI当中嘛,对不对,如果是子类,我就直接执行吧,执行完了之后怎么呢?就放到这个当中缓存起来,我将来就就执行负类方法嘛,对不对,所以说通过API调用的是最简单的,这个能理解吧,所以说spring最先开始把它执行完好,当执行完了通过AAPI调用的,那么要执行spring的内置的,Spring内置的他并没有直接实例化,有的同学可能会问这个地方,我先留一个疑问给大家,就是说像这种spring内置的啊。
16:45
Spring内置的这些什么?呃呃,CCPP这个这个CCPP,他这里内置的是一个并in啊BD啊,它为什么不直接内置一个对象啊。S.
17:01
这置一个BD啊,这个问题非常非常严重,非常非常大,这个问题如果你把这个问题搞明白了,那对10SPRING框架我估计你就非常非常熟悉了,非常非常懂周总的意思了啊呃,这个问题呢,我给大家先就是抛出来,你们可以去思考一下,或者你可以加我的微信,呃,QQ怎么聊一下,因为在课堂上讲的话,这个问题的话,因为很多同学根本就呃不明白,如果说你有一定思路啊,你可以告诉我,跟我们来聊,如果你没有思路,我们放在课堂,放在这个课上来讲的话,不适合,好吧,你可以讲,呃,私信我啊,你看你能不能理解的对不对,但是我先告诉你这个问题的本质是什么东西啊,我先提前录屏吧。
我来说两句