00:00
嗯,OK, 我们接下来我们刚刚讲的这个东西只是一个理论,或者说一个现象,对不对,那么我们通过代码简单给大家看一下,就是spring到底是不是这么做的啊,好了,我们来试一下啊,就这个例子啊,呃,一开始调用flash方法来啊进来,那么他是在这个里面完全扫描的,在哪一行代码完全扫描的,我也给大家找到啊。啊,它应该是在这一行代码完成扫描的,我们端个点断的这个地方啊,那么呢,在没有执行这行代码之前的话,我们这个b DS map里面,它肯定是没有这个X的,我先把它拿出来,这里没有X,当然他可能有其他的啊,其他的是spring内置的,我这里也给他写一个other泽吧。对点000点,他其他的肯定有,只不过一定没有这个X,为什么?因为没有完全扫描好,那么这里面包着两个问题,往下停,第一个这里面确定有没有X得在看,第二个我们要知道看到这个并这map它在哪个地方,看到这个变量,好,我们来断个点跑一下,直接跑这种断点模式去跑,那么在执行这个代码之前,我们先找到这个并map,它在哪里,这个并map呢?我这个地方画了一张图,它是在整个这个spring农器application connect当中的这个并fight,这个什么啊,就是我们这个并工厂当中的一个变量,它的属于,也就是它是在整个容器当中的啊,这个我不知道,呃,能不能听懂,就是我们不是有个容器对象吗?叫做叫做。
01:19
Application application contain, 这个是不是容器对象,容器对象里面呢,有一个属性叫做be factor, 就是我们的工厂,其实我们的容器跟这个这个application con跟这个并factor的,他们讲到的都属于分容器,只不过呢,这个呃是扩展了我们的b factor, 它比我们factor更加丰富,所以我们把这两个都理解为我们的10分容器也没有关系。那么在这个b factor当中,它有一个属机叫并点map,那么我们来看一下它是不是在这里啊,来找到我们断点的地方,首先我们来看这次。呃。嗯,我看一下啊。其实这里已经有了这个,呃,这个啊,就是我们这个default,呃类我们把它展开了,你看以在这个当当中的话,它应该有一个b map了,呃,我也给大家看一眼那个吧。
02:05
Application context吧。看一下有没有啊。这里不一定有,我们往这个地方去看吧,Les的时候来,或者看这个地方来,你看这个,呃,Application context, 我们把它展开来,就是就是这个contact嘛,这个容器对象,这个容器对象里面它有一个叫做并factor这么一个对象来。这个b factory当中有一个bs map了。在哪里,在这里啊,它有6个,它里面有6个,这6个呢,你不用管,以后我会跟大家讲讲清楚,这它是默认的,但这个里面绝对没有一个X啊。他有一个APP conflict APP conflict是因为你在这里完成了注册了,所以说这个就是这个背后的意义,就是把我们这个。配置类变成一个bin,放到这个map当中,它的key是一个字符串,对不对?你看它的value,把它展开了,这是key,它的value,它的value是一个对象,叫做I的bin,这个对象我们这个类我们就不去看了啊,你一眼就能看出来,这个类绝对是实现了b defin接口的,所以我们把它称之为也是一个b def, 好吧,所以这里面没有X来,我们来看一眼,这行代码就是完全扫描的,我们让他往下走,这行代码执行完了之后的话,我们来看到啊,我们直接看到这个并发出来,它里面这还是6个来。
03:14
当这行代码执行完成之后,它就变成了7个,呃,当然我给他点进来了,可以不用点进去啊。啊,直接在这个地方了,然后他跑下来,当把这张代码执行完啊,往下走好了,你看他就是应该什么,还有9个啊9个就是因为我还有扫描其他的嘛,这里面一定有一个X来家看到没有X的K就是X这个字符串,它的value呢,是一个叫什么的SC的generation并different,它也是一个并different的对象啊,就generation并different。好,你看他的一些,呃呃呃,这个BD它它怎么来描述我们这个类的啊,它所对应的类就是我们这个X,这个没有问题对不对,它的呃作用域是单立的,默认就是单立的吧,你看什么懒加载是空空表示就是默认的就是for不难加载么等等之类的好多好多啊,比如说它的一个out view的model注入模型是00表示手动注入,如果你把它改成2或者1,它就是自动注入by LA或者by type啊,这个是手动注入等等之类的吧,很多信息现在大家看不懂,我们现在就不去看了,总之呢,这个就是说你包括他的一些效毁方法,什么初始方法都没有对不对,你看看这个病,这他就用来可以来描述我们整个是supreme病,将来去实例化这个病的时候,我要的一些信息,比如说我们在实例化这个病的时候,他要不要调用它的初始化方法,它的销毁方法,要不要调用的,你看这你method对不对,他都没有就表示不需要,这个能理解吗?好比说你这个X当中有一个什么呢?有这么一个方法,我们随便写个方法,就是public avoid叉叉叉或或就然后我给这个方法给它加上什么。
04:40
Post construct对不对,你看这种方法就是初始化方法嘛,对不对啊,你这个这个方法你现在没有提供就是没有嘛,当然你这样提供这里也是没有,呃,这个怎么讲呢?因为这个注解的话,他并不是一个叫做in best LA, 这个need best LA是通过插标配置的,我只是告诉你就是spring,你实例发个病的话,他的一个很多东西的话都要提供给他,不然这个病就实例发不出来的,那么这个病的信息都描述在我们这个病D当中,所以这个里面就是怎么样的,就是9个也这个X被扫描出来的,好,X被扫描出来之后的话,那么这个代码阶段往下执行,这个时候还没有实例化并对不对,也就是说我们从图上看的话,就是完成了这一步,呃,就是变成了并different对象,嗯,并且呢,把它放到了并different ma当中,这里面多了一个X好代码接在往下执行,这个时候他会去调用我们的并factor possible, 这实也就是在这些代码这里了,应该是在这个low more这里啊,我给大家找一下在这个地方来,就in卧和并possible在我们断个点都在这个地方啊,我们也可以断个点都到这个地方,你看他是不是跑到这里来了。
05:37
来,让他往下走。好,你看他是从哪里调过来的,他是从。这行到这里了,我刚刚大概点到到这里去了啊,到到这个下面去了,这个没关系啊,因为我等下给大家解释解到这个方法,反正不是这个方法,就是在这里无所谓,我们等一下再来看啊,总之他会从这个地方来去执行所有的。我们程序员提供的,或者说呃,Spring类似的一些并factly possible system be possible system, 那么这里面你提供了一个什么呢?这个,那么在这里就回掉了,回调之后进到这个里面之后的话,他就会什么从我我们这个你看这个代码呢,并翻get b b, 你看他的源码,他是不是从刚刚那个map里面呢,从这个b def map里面,还记不记得这个b def map里面有9个,有一个X,把这个X一拿出来,是不是得到了一个b defin, 然后返回出来,那么我们就得到了这个什么呢?具体的这个bin defin, 然后把这个b defin的class改成了Y。
06:31
是不是,但是你并没有改他的对不对,他的K还是叫X啊,你只是改了这个K对应的这个值当中的那个什么样呢?Class这个K是没有改的啊。他改完之后的话,再给它放回去,放回去之后,那么是不是接着往下执行实例化这个病的时候呢?那么他在哪里实例化这个病的呢?他是在我给大家找一下。他是在这行代码这里去实例化这个病的,我们直接让他跑下来了,跑到这个地方来让他,你看在此之前他都不会打印,说我们这个X被实例化的,他来没有啊。
07:05
现在执行到哪一行?执行到了。那啊,还没有让他往下走吧,在那你看执行到这行代码了,在此之前我们这个X都没有被打印,然后Y也没有被打印,说明并没有实际化,当我执行完这套代码之后的话,那么是不就开始完成他的一个什么样呢?B的一个实例化了,那么这个时候他会实例化Y,因为这个被偷梁换柱了。这个X等于它已经不就是你通过这行代码执行完了之后的话,这个它其实已经变成什么了,Y的BDS对象了,而不是X。懂我意思吧,这里面不存在什么什么XBD的,就是一个YBD,所以说最终实际话就是一个YB,那么我们接着往下走,你看这个时候会打印一个什么呢?YB create, 但它的K没有变,所以他的名字还是叫X。那么这个就是通过这个例子啊,来给大家演示一下,关于说be,那么你有了这个基础知识之后的话,我们再来看这个in work和impact possible时也是整个这个方法,它里面的一些代码,这个就接下来会有一点点难度。
我来说两句