00:00
嗯。好了,接下来我们再次来讲这个引work和并发possible的方法,那么前面的话呢,是属于一些基础知识,你需要去掌握的,呃,我没有太详细讲,因为这个基础知识我经常讲,对不对,好,很多同学都听力了,所以说我就快速过了一下啊,就是为了方便讲接下来的内容,讲这个引误和be possible, 这是这个内容啊。呃,这里我建了一个包,这个并有点possible的这么一个包,这个包下面的话有两个包,一个叫病,一个叫comfort comfort的话里面放的是配置类,配置类的话没什么很大的作用,就是为了扫描这个包括下面所有的病,那么这个包告下面有哪些病呢?展开它啊,当然这些病都不一定会被扫描到,比如说有的病它是没有加什么other component, 你比如说这个呃,这个B,它就没有加other comp, 对不对?总之这个里面放的就是一些类吧,那么我为什么用ABCDE来命名呢?其实这个有很多同学诟病过,就是呢,给我提过意见啊,所以你这个名字取的太不规范了啊,我也解释过很多次,这里再解释一次,就是说你像这些类啊,这些病它是没有意义的,我们只是用来测试的,他不可能做到贱明之意啊,啊,你等下听完课你就知道,如果让你去取名字的话,你也会犯难啊,我们这个只是说为了去演示spring的某个现象,就好比说你想要演示一个spring的spring容西,能不能初始化某个病,你建一个类,你叫优势,你叫order,你叫ABCD,是不是都可以,我只是想测试一下spring容器能不能把这个对象给实体化出来,而这个对象它本身存在的意义是不大的。
01:21
所以说我们这里的命名都是有这个ABCDEFGHI来命名的,因为我实在想不出来这种名字,但是而且它的每个类的,它的一个意义的话,都是非常非常复杂的,所以说我们越简单越简单可能越我觉得越好吧,行,那我们来看一下啊,关于说引入和并possible这个方法,它首先在哪里,我没有找到它。点开它来。在这个方法这些都是做准备工作,那么准备完了之后的话,Spring执行这个遗物和并post,我们刚刚讲我就是用来怎么样对我们的spring的一些容器做一些什么样全局性的一些设定,好点开它,点开它就是到了这里来了,下面这个不用关心,因为这个方法,因为执行完了这个方法之后才执行到下面的,所以下面我们先不关心啊,我们先来看这样方码执行的时候点进来,诶点到这个里面来,那么这就是他所有的代码从这里到这里到这里到这里到到到这里啊。
02:10
好,这个代码比较多啊,好到这里就结束了,嗯,好,我们就用这个方法,首先看他传的一个参数进来啊,传了两个参数,一个叫做并factory,一个就是我们这个叫一个list啊,啊这个并factory我们不需要关心,他就是传到我们这个这个容器对象的,也就说传到我们你可以理解为把整个容器传进来的,你可以理解为就是传到整个这个applicationli content对象进来了,因为他在里面去获取一些,获取一些东西啊,因为你的bin def defense map, 我们前面讲的这个map了,前面讲的这个map,它是不是就存在我们刚刚说的这个b def当中了,存在这个就存在这个b factor当中,所以他要把这个b factor传过来,他可能要从这个b factor里面去拿一些东西,所以他要把这个b factor传过来,好,第二个参数传的是一个list,那么这个list的话,咱们就需要去研究一下啊,这里有一个叫做什么呀,这做b factory possible system啊,我把这个图给在图片给它画出来啊。咱们先暂一下停。
03:02
嗯,好了,呃,我已经把它的图像给画出来了,就是在这里。那么这个是干嘛的?我先直接说,它是用来存储。存储。所有的。所有的什么呀,程序员通过API。提供的。并impact possible system.那这句话什么意思呢?来解释一下啊。我们首先看这个历史是从哪里传过来的吧,来他是从这个方法调用的时候,呃,也就是说我们最最外面是没有传的,最外面是传这个并impact,好传了be factory到这里之后的话,他通过了一个叫什么这个getbefactor.possible,就是这个方法拿到了一个历史呢,这个方法肯定返回个历史点,他返回就是这四点并factory possible这置这次指的是我们当前这个容器对象,也就是我们这个图上的整个这个大的容器对象,这个application context这个容器对象。
04:01
这个东西对象,这个东西对象里面有一个叫什么呢?有一个list,有一个叫也这么一个list的变量,这个变量里面存的就是并post,那么默认肯定是空,所以说我们图上画出来的话,默认他讲到的一开始是是空的啊,一开始这个里面什么都没有,就是黑黑的什么都没有。但是呢?我指的一开始,当我们整个什么呢容器实例化的时候,也就是说你在这行代码实例化的时候,它应该是为空的。但是我们可以通过这个逻辑对象,点ADD一写来,你看这个ADD方法来,他就是往这个历史里面放东西了。有同学看来你看你是不是这四列be factory possible就是这个例思,对吧?啊,可以往里面添加一些be factory possible, 你看我添加了两个类,添加了一个什么呢?一个B,一个C,添加这两个类,所以说当如果说我们按这个代码去执行的话,执行到这个in work和并factory possible执行到这里的时候,我去断个点,那么这个list当中讲道理它的size应该是为2的,来,我们跑一下。
05:00
啊,当然我跑错了,不应该跑这个test,并这里停一下啊,我应该跑他。右键。第8个。好了,我们来看这个历史,它的size是不是等于2啊,你看吗?两个嘛,就是我们的B和C,就是我自己添加的这个B跟C嘛,所以说这个历史是这么一回事,好,你现在再来理解这句话什么意思啊,存储所有程序员通过API提供的并fact process的。这个地方呢,大家要注意听,首先它是用来怎么样存储并factor possible system的啊,我们先不要理解说什么程序员通过API提供的,这句话你先不要理解,先理解be effectively possible, 也就是说。只要你是possible。就只有你是b factor的possible是我才能够往里面存,你存一个不是B的possible,它是存不进去的,你比如说你contact对不对,点什么ad b possible是你放一个别的,你放一个contact放里面是放不进去,它会报出编译的时候就会报错嘛,对吧,因为他需要的是一个be factor possible的。
06:00
所以这句话好理解,存储存储什么啊,并possible测是。这就是他的表面现象,好理解来。它还有背后的意义,并factory possible.他呢?还有子类来我们来看一下这个接口啊,你看我们这个B,它确实是一个be possible设是,但是我们这个C呢,它是一个叫做b definitely possible, 也就是它并不是bely possible, 它为什么也能存进去,就是因为这个并ity possible它也是一个接口,它呢继承了我们这个,所以说呢,它是一个怎么样向上转型,存进去的时候,它是能够存进去的,好于是这个地方你一定要记住一个点,就是说当我们说到并factor post这成的时候的话,其实它分为两种情况来。就是我们随便这里面随便画个图啊,就是比如说我们某个类,我们随便来一个类,来这个类啊A类。如果说我们说这个A它是一个并possible system的话,那么他可能会有两种情况,第一种情况它是直接怎么样呢,实现了我们这个。
07:06
Factory possible system. 它是直接实现。我们把这个拿过来啊。那么还有没有,还有第二种情况,相信大家应该都知道了,就是它是怎么样呢?这是第一种情况,还有第二种情况,第二种情况呢,它是什么样呢?它是实现了子类啊实现了这个是不是也可以,那么我们都能说这个类它是一个什么样的。他是一个。Bely possible是,这是两种情况,这两种情况它都是属于一个befely possible是的。可以直接实现它,也可以直接实现它,那么这个代码上怎么说呢,就是这样子的,就是我们这个B。那你看我们这个B的话,它是直接实现了并possible的,也就是我们说的这种情况,还有一种是C,它是怎么样呢?直接实现了,也不是直接,它是实现了子类的并defly possible, 也就是我们这种情况,所以说这个类无论是谁啊,他只要是这两种情况就是一种,我们都能说这个类就是一个并ly possible, 它是一个。
08:05
啊,并工厂的后置处理器,好,这个一定要记清楚,我们再来说,再往来说一下,为了方便讲课,我们是这样子的,来。我们这里面定义了很多类啊,比如说第一个A类,你看这个A类它就是怎么样直接实现的,这个并process是不是B类呢,是也是直接实现的,只不过呢来源不同,A呢,它是通过扫描能够扫描到的,因为我们这里有个configgu来对coniggu,你是不是扫描这个包,那么A能不能扫描到,你加了other computer可以扫描到,对不对?还有呢,B呢,它是没有加的,它扫描不到。所以说这是第二种情况。还有第三种情况,我们这里面来给大家说一个东西啊。他其实应该有4种情况。啊,第一种情况。我们把它列到这个地方来啊,我就直接写到这里面,我等一下会删掉,因为这个不重要,我们只是方便讲课去方便记忆,相当于一个呃呃一个一个一个一个一个那个一样啊,第一种情况就是通通过什么注解扫描的好,还有第二种情况。
09:06
就怎么样了。API提供的。所谓的API提供就是B这种方式啊,就是他扫描不到,但是呢,我想让是不会发觉,我想让这个类生效的话,我可以怎么样呢,我会通过这种API呢,就通过这个conduct容器对象直接调用他的什么点ADD,并impact post, 把这个6出来,这个对象放进去。它也是能够被识别到的。好,这是第二种情况,那么还有第3种情况。第三种情况呢,就是呃,我们的叫做通过in defence对象。动态注册的。那这个什么意思啊,这个我们回到我们前面的节课,大家应该有印象,然后我们说了整个是不容器,他可以把这个X扫描出来,然后呢,通过正常流程把它实别灌出来,但是你有没有想过这个并map存在这个地方,我可不可以这样子,我直接往里面放一个进去,比如说我不去改这个X,我直接放一个Y进去。
10:02
是不是也可以了,把这个Y直接放到里面去,是不是也可以。他最终是不是也能够把它识别过出来,不一定要通过扫描嘛,如果如果你懂了这里的话。所以说我们这里面还有第三种情况,比如说我们这个J的这个J它是不可能被扫描到的,对不对,它是一个子,只实现了子类的嘛,他没有被扫描到,但是这个J它也能生效,它怎么让它生效呢?我们通过F呢,F它是能够被扫描出来的,在执行F的时候的话,我们通过F调用了reity并DEF,把这个J放到里面去了,你看这个J来,这就是这个J码,我们把这个J这个类变成一个并in defin对象来变成一个哦不,Tra并de对象来这套代码你不要理解这样代码,你就直接把它的任务就是它可以把一个类变成一个并defin,然后呢,我们调用它的API,把它直接放到了这个并def map当中,你看这个这个代码它就是怎么样呢?往这个map当中去扔来,我们可以看一下来。呃,才才put了,直接往这个并map里put进去了,那是不是和扫描出来的差不多,只不过一个是你通过写了个注解art component, 然后spring帮你扫描出来一个呢,是我通过spring的一些扩展手段,我在中途把它扔进去,在spring实例化这个,呃,就是从这个map里面拿,之前因为实例化一个病且是从这个map里面拿,对不对,我在他拿之前,我就往里的动态放一个,是不是也可以,所以说第4种就是什么通过什么呢。
11:20
B defin, 第三个就是通过a b defin去注册的啊。当然还有第4种,其实也不能,这个其实应该是属于三种,三个人都有的一个,只不过它比较特殊,就是什么呢?就是一个顺序问题,什么叫顺序问题,就是实顺序啊,实现了某种接口的一个一一种好,这个什么意思啊,这个如果要解释起来的话,比较麻烦,你注意听一下,呃嗯,我要不要停一下录屏我看一下啊。我11分钟停一下吧。
我来说两句