00:01
嗯,那么这样代码我们也说完了啊,这样代码说完了,那么这个else对应的是前面那个if,我们说的这种if我们不是前面已经讲过了吗?他在98%的情况是不会,呃,这个if是会成立的,所以对应的这个else我们可以认为这行代码没有意义啊,在绝大部分情况下它是没有意义的,这个L是不会进满,好,于是到达下面来了,那我问一下各位同学,你们现在想象一下。那现在是不把这些绿色的全部执行完了,无论子类负类执行完了,这个也搞完了,那剩下的就是什么了,内置的和你提供的扫描出来的对不对,是不是这些啊,那他是怎么办的,他是怎么搞的,他代码还是写的挺复杂的啊好我们来看一下,那么首先去找,嗯,找什么呢?找副类啊。这行代码是不是早这张代码我们已经讲过了,只不过类型不同,前面传的是子类,还有没有印象了?你看看前面这一张传的是get b name for type, 传的是这个possible,那下面的话它是传的是负类be possible, 也就是这行代码传的是它,那么一一找负类能够找出来几个呢?啊,这个地方的话,我们来看这个图就能看出来他应该能找的是什么,这个A1和H能够找出来啊。
01:03
以及一些spring内置的,这些spring内置的话,我们这里就不关心a eh和怎么样呢,Spring内置的啊,呃,这个地方呢,Spring内置的一个啊,我们不去关心它啊,好找出来应该是4个,如果我没有猜错的话,有可能是3个了,如果我没有记错的话,这个地方应该有一个是spring内置的,只不过这个东西的话呢,它是跟那个spring那个什么监听有关的,就是做了个监听器的有关的,我们这这里讲不到,我们就不去关心他,就是他干了什么事情不需要关心啊。好了,找出来这三四个吧,我们先认为,然后的话就好,这里面代表就比较麻烦了,你对比一下前面代码了,前面代码是spring,一开始就找出来了,你看吧,你看有去看这个地方比较麻烦,好来,你看前面代码找出来之后的话,跟着就把它实例化,放到历史的当中,但是在执行复类的时候,他就不是这样子了,你看他干了什么事情呢?他那找出来之后,把所有的找出来之后,它并没有立马实例化,而是它定义了3个变量,3个呃,集合一个叫做什么呢?PR的post PRO就是这个里面存的是对象,我要说明的是这个里面。
02:04
存的是对象,他存的是什么呢?实现了p order的对象啊。这个里面注意一定是对象存的,是把它存在里面好,第二个呢,它又定义了一个集合,这个集合呢,存的是名字实现的order的上面那个是p order, 你看这个是order的,它这个存的是p order的,这个是要存order的,为什么呢?因为我们这个类啊,比如这个A,它有可能实现了order,也有可能实现p order的,因为order和P是两个类,对不对,你比如说你看看来实现的。Priority.诶啊,不能实现逗会就可以来我们来看一下。啊,它有可能实现这个接口,它也有可能直接实现什么ALT的接口啊这样子啊,是这样子,那么呢,对于s spring而言的话,这两个它都要分开处理,所以它定义的一个集合里面存的是对象实现了po order的,然后它又定义了一个集合,里面全的是字符串来存存order的,最后又定义了一个集合,就是我们普通的这个A,没有实现任何order和P的接口,就是一个普通的,我们可以理解没有实现p order或者order的接口,这个这个啊,就是no more的嘛,普通的除在这个里面定义了三个,好,这三个呢,其实会有一点问题,你仔细发,你仔细看啊,这里面思考两个问题,第一个问题。
03:17
他为什么不像前面那样子,你看前面他的做法是怎么样的,找出来之后立马把它实体化,放到一个咖当中来。然后呢,就拿到这个看的不断去怎么执行,呃清除,然后再来找又来怎么放里面又来执行,但是下面的它不一样,下面的是怎么样呢?先定义这3个集合。讲道理一个集合就可,你看前面不是我们也执行了分批吗?他用一个集合就搞定了,但是这个地方他用了三个即合,为什么好,等一下再来说,你先把这个问题留,但这个问题往下听第二个。他这里这三个集合呢又不一样,第一个集合呢,存的是对象,第二个第二和第三个集合存的是字符串,那么为什么要这么搞好,我们现在不关心来,我们现在看代码啊,代码是这样子的,那么你这里找的话能够找,因为他这里是找到所有的负类的对不对,能会找出来,Ae所有负类都会找出来啊,因为你只扫描的就会找出来啊,找出来之后的话,那么就什么存的,也就是说这个里面存的是所有的负类的集合,好找出来之后的话,他干什么事情呢?他就看他说你这个,你他现在现在还没有实例化对不对,这个地方是没有实例化的,只是找出来了没有实例化。
04:23
这个地方比较难注意听的好,然后去判断你这个,比如这个A,它是不是在已经被处理过了,那肯定没有对不对,没有处理过就接LCF,然后再来看你这个A。他是不是实现了P2的接口。那么A肯定没有实现。依赖也没有实现,所以说这个L衣服呢,这里呢,就怎么样呢啊这个这个LC衣服,所以这里不会进,好这个L衣服呢,也不会进,我们去看A啊A的话不会进这个LC,也不会进这个L,它会进这个LC,就把A呢存到这个集合当中,存到一把这个名字存进去了,同样没有实例化。
05:01
啊好,那这个负循环第一次就结束了,来第二那么1对不对,我们说是a eh嘛,对不对,还有没有同学有印象的,1的话是不是同A一模一样,把1呢也放到这个里面去了,也是字符串没有实例化,好第三遍到了我们的HH就比较麻烦了,啊来我们来看H了,H呢,它是实现了PL的接口,好我们来看一下他怎么做的,他首先判断你的H有没有CPL,实现了PL的接口,他就把H呢实例化,注意这个地方是为什么会去实例化。H对上,把HP对象的实例化放到这个历史当中,好,然后整个发句化就结束了,结束了之后代码就在往下执行,然后呢,首先要因为他们我们说了是spring的原则是什么?执行实现了p order的就的呃呃,就实现首先是执行p order的,然后就执行order的啊,他们的顺序是这样的啊,那么就把p order的拿出来去执行的,执行一个排序啊,我们这里没有排序,我们只有一个对不对,有两个的话,它会根据你这个order的方法的一个返回值进行排序啊好,排完之后的话,开始来执行,那么到此为止,我们把H在这个地方就执行完了,H执行完了之后的话,下面它开始怎么样呢?又又又开始定义了一个变量,定义了一个类,用来存储order的,我们这里没有order的。
06:10
因为我们这个a eh这三个路,像H是实现了p order对不对,但是他没有实现order嘛啊,就算实现了,它也这个地方我们先不管了啊,好我们就到了这个地方来了,就是我们不考虑order了,因为order和P其实是一个概念啊,好我们现在来看这个到下面,下面的话呢,就为什么又6了一个list,这个list呢,存粹是对象注意啊。但是它便利的是前面那个什么存的没有实现任何接口的那个历史的一个什么呢?字符串的那个集合,也就是这个集合来这个,这里面存的是字符串,也是我们的A和H,对不对,这个里面讲到理就是到此为止,我们这里执行完成之后的话,它应该里面就是有个A1对不对,不是A和HA对不对,它存的是字符串,好便利这个集合,把这两个字符串拿出来,把这两个病的名字拿出来,拿出来之后的话,调用get b方法,把他们的实际化放到这个list史当中,然后去执行,你看是不是有点浪,他为什么不在一开始在这个地方,你仔细体会一下,他其实可以完完全全在这个地方,就去把这个代码复制过来,是不是就可以。
07:08
你体会一下是不是一模一样的,这里能听懂没来我把这个代码来把这个代码复制一下,CTRLCCTRLV.呃,他这里还有指定的size,我们可以不用指定size对不对,因为历史它是可以扩容的这个动态啊,好第义一个list。Else的话,我就怎么样呢,点ADDDD对不对,把这个对象放里面。然后第二个get并方法对不对,是不是啊,你这里面拿果是AA嘛,把这个名字传过来嘛,这个PP代是不是这样子不就实例化,然后我把这个历子拿出去执行不就可以了吗?他下面做的这个事情就是这个事情啊对不对,你仔细体会一下,它上面就是拿到这个字符串,把这个字符串进行一个遍历啊,把这个字符串啊,这个这个集合进行一个遍历,在这个地方进行了一个for循环了。获取分完了之后的话呢,把它实例化放里面,他为什么一开始不实例化呢,没必要啊,对不对。有的同学说他可能10分钟这样写的话,他就就就是喜欢这么写,但是他有矛盾,但是他的什么呢?他的P的,他就不是这么做的,我们来看P的了,你看这里面有三个变量,这两个变量是字符串,唯独这个变量是对象,他首先定义这个例子,然后呢,在在找的时候的话,它直接把这个po的ADD的。
08:16
那么我们说了,你把这两个list,这里面是字符串,你把它换成对象是不是也可以,也是跟这个做法是一样的呢,就是找出来之后把它ADDDD放里面去的,为什么这个要直接把对象放里面去,哎,这两个只是放一个名字进去呢,在后面再通过一个多词觉的手段把它实际会放进去呢,好,这里看懂了没有,没有看懂的话好好体会一下,就是这这是不是这个写法很蛋同对不对,这不像一个大师做出来的代码,那么我们经常对不对,就是是是是说论的代码肯定是啊,你你挑不出什么毛病对不对,这肯定也不是有很大的问题的,对,他既然出现这么大的bug,这个像一个什么呢?刚刚毕业的一个大二大三的时候去写出来的代码。有这种感觉吗?好,这个问题是为什么啊?嗯,大家留意一下,我下节课来解释,好吧,你们自己思考一下先。
我来说两句