00:00
呃,我来说一下这个问题吧,首先来就是问题是为什么不要内置一个并defin,哎,不是直接内置一个对象,好,我们先来看一下怎么来,先看一下就是这个东西它是什么时候内置进去的啊来各位同学看,在不容器实例化的时候呢,这个是实例化,这是初始化,一定要明白啊,在不容器实例化的时候,它的这个应该是在这个里面吧,来。那各位同学看啊,来,你看他首先实例化调用构造方法,构造方法里面呢,有两行代码啊,这里面实例化一个叫reader的对象,那么在实例化这个reader对象的时候的话,他做了一个叫做什么iloation con点,呃,Iloation con process这么一个呃方法的调用,好我们来看看在这个方法里面的话,其实spring它就开始去做一些内置的,比如说我们那个CCPP,它在什么时候内置的,我给大家找一下,他应该是。啊,Configuration应该就是他吧,来在这里来,你看没他呢,首先把这个configuation class变成一个并defin,这root并def root def肯定也是实现了并DEF接口的,我们可以看一下来。
01:00
你它实现了并接口啊,这个顾名思义就可以了,继前的of的并实现它把它变成一个并finish对不对,首先把它变成一个并in,然后呢,把这个并in finish呢放到了,你看这个代码来这里面是不是一个并DEF来,他把它变成一个deff嘛,Deff在这里面,然后把这个deff传过去,传过去传到了这里,传到了这个里面来并DEF来,好,然后的话呢,调用这个的件S方法,把这B传递传过去,调到这里,这里的话,就把它放到了这个b map当中去了,我们可以看一下了啊,首先get一下,看你有没有,如果没有的,我把它put进去了,在这个地方把它put到这个里面去了啊,就是把它放到这个并def map当中去,也就是说斯不总器,他一开始他在这个地方呢,它是把它变成了一个并defin对象来把它放进去了,他为什么不直接。实体外出来一个对象的,我们可以这样搞了,你比如说他对不对,我可以直接这样子的,我随便写一个,那等于你有一个他对不对,没有问题吧,这样子。啊,然后快开始快结尾很好,结尾好这样子,然后的话我就通过这个,我看这里面有没有对象啊,通过这个啊。
02:03
嗯,我看一下在这里啊。点呃,他应该有个叫什么,呃,ADD这个并呃,我看一下有没有啊,直接把这个对象放进去了,如果没有的话,我们要去强转一下。因为这个reing的话,它是那个的,它是一个B发腿,我们可以把它强转成为一个B发腿,来这样我给大家写一下这个代码啊,来bnf fac y y丙。Defult b fau啊,并impact也可以啊,好,它强角成为一个并impact好点啊,The justs be get bein.Ad, 嗯,他是我看一下稍等一下,我看下这个API什么,我又有点忘记了。通过context.getbfactorcty。ADD.或者叫register r1st register.
03:01
Single啊,是他,我看到他拿出来的,并里返回来是一个叫做他啊,那就没关系,我们要强短他啊。啊,他肯定有办法啊,来这样子啊。你看这样是不是可以。啊,然后的话点。啊,我没有定义变量,Sorry.BF就等于它。强转成它啊,然后做DF点好,你看这样子,然后我就把这个对象放进去了来。他直接可以把这个对象放在里面撒,他不一定要去,呃,搞成这种什么be dev才可以撒,那这样子也可以啊,这个代码是问题不大的啊,可能会有一点小问题,但是这个大概的思路是可以这样子的,并且这个不是我意营出来的啊,啊,我等一下会给你拿出证明给你看,比如这个名字随便叫什么啊,这个对象你把它放进去就可以的,这样子是没有问题的,那spring它为什么不直接6出来的,因为这个是spring自己的对象对不对,他不一定要,他不一定非得变成变defin啊,不一定要去扫描啊,对不对,我们以前之所以要变成变,就是因为这些类似你提供的,你放在这个地方对不对,你要干嘛,是不人自己不知道,所以他要根据你提供的这些注解信息去怎么样去实例化,这个过程就是呃,单立的还是原形的,但这个对象是spring自己的,他肯定知道他什么情况,他自己可以溜出来嘛,对不对,他为什么不这么做好这个东西呢?他并不是我去运营的,我给大家来说一下,其实在spring本质啊,它底层就是他的源码当中,他有这种做法,他会直接把一些对象呢,直接放到这个词配容器当中去,不并不需要去6的啊,并并不需要。
04:37
手生命周期的啊,在哪个地方呢?我如果没有记错的话,在这个power的并factor当中应该会有一些代码啊,他会直接把它就是呃放到这个东呃spring这个东呃容器当中去的,来在这里有连看,把这个代码来并发点just single来这里边直接把这个就是我们整个的环境变量,这个就先把它放进去了,而且这个我也可以给你证明的,怎么证明呢?我们可以断个点站在这个地方来,嗯,各位同学看来我们来跑一下。
05:03
就只要这行代码执行完啊,当然了,我还是停一下来,各位同学再给大家验证一下,就是我大概点到了这个地方,在这个代码执行的时候的话,我们整个单例词里面是没有对象的啊,我们来可以看一下来,比如说这次当中的be factory啊,Be factory当中的这个单例词single objects当中,它是应该是没有对象的啊。我们找一下singleton objects.看看在哪里啊。在这里来0啊零一个它是没有对象的,好,然后往下走,你看代码往下走,呃,走就是经过这个方法之后的话,那么spring当中的单类史这里面就有对象了,就是他自己内置的一些对象,就不需要你去干嘛的,你看有三个了,就是我们通常讲的这个system prop啊,Eleven的对象啊,System eleven的对象,如果你呃做了这种spring boot的话,这三个对象是相当重要的啊,就spring boot里面对这三个对象进行了充分的利用,那么这里我们不展开讲,我只是告诉你,Spring它本身就是这种做法就有的地。
06:00
你比如这个I的,就我不知道你们知不知道啊,就是我们可以去直接通过一个的拿到某些注入的属性,你们有没有这么写过,如果你做spring做的开发做的比较多的话,应该有这么写过,就是我这里面直接二奥注入一个什么,呃,一路美的对象对不对,呃。诶,论文是哪个。第8个。呃,我们随便写吧,那比如我就写个S,然后的话你就怎么样直接,呃,当然这种写法可能你没有那个,可能里面写的是这个子类,我这里就是给大家写个伪代码,然后你通过这个S可以直接去获取某些呃呃变量,就比如说你的呃环境变量,或者你给他这己设置的这种什么啊呃运行的参数都可以拿到,就直接可以这样子,因为有的同学应该做过,有的同学可能是不是你开发做的比较少,可能没有做过,他为什么可以二代奥注入这个对象,就是因为这个对象它本身就存在我们所谓的这个单位词当中,所以可以直接注入进来,那么这个对象怎么放到单列词当中呢?不是我们搞的是,是不是容西自己把它放进去的。好说了,这么多同学们明白我想表明什么问题吗?好,最后再给大家看一眼,就是说当我们这些代码都执行了,比如说执行到这里啊,我让他跑到这个地方来,往下走,这些断点先给它去掉来。
07:16
要走啊,这一段点心都给它去掉。好了,你看吧,到执行这样代码之前,其实我们整个这个单当中是没有你影想用的这些对象的,就是你那些对象应该是不在这个里面的啊,这些啊,DF机是在啊,比如说你有一个service,这个地方是不存在的,比如说我们这里是来一个简单的病友来右键六一个就是你们通常讲完这种,比如说优service是你们自己提供的S1RV sa1,对不对啊,就给他加一个other component啊,你像这个病的话,它是正常的病吧,这种病它是属于特殊病啊,因为它是实现了spring的接口,它是属于spring的某些特殊病,对不对?我们正常开发spring不可能写这些病,对不对,除非你做了一些spring的扩展,比如你做了一些spring的高级开发,才会去写这些病,正常情况下我们都是写一些service啊,Controller啊到啊对不对,也是类似于这个病,那这个病的一个实现的一个方式的话,就是他的一个实例化的一个,呃呃,实机的话会是在我们那个这个方法执行完了之后,就这个finish啊,那么在这个之前的话,我们可以看到整个单当中是没有这些这个user service的啊,我们可以看一下来be factory.
08:11
呃,在这个singleton objects当中。这里啊,18个里面呢,有这些东西,但是这没有我们这个优势设备形看没没有的啊好,当这张代码执行完,我们往下走,你看这里面会多了一个优势设备是吧?呃,在这里的刚刚是没有的,好,我说这么多,想告诉大家什么意思呢,就是说。呃,单类词当中存的就是我们那些那些,呃所谓的病,也就是说SSP论,如果说你想把一个你想让一个对象变成一个病,对不对,放到我们的spring逻辑当中,或者放到你们所谓我们所谓的这个单例词当中去的话,它是有很多办法的,有一种办法就是可以直接啊通过这种API的方式,比如我们刚刚说的这个contact.get并点register single这种方法,我们可以看一下它指定代码了,它是直接把这个B扔到那个什么单当中去的啊,连看super.register这个东西,然后我们可以看一下它底层代码ID single方法的在里面,是不是在这个single put进去了,直接放进去。
09:06
它就直接放到单列里面去,但是呢,这种方法我们作为一个开发者,一个程序员而言是很少用的,我们用的最多的方法就是我们在这里提供一个类,比如这个user乐service,写一个art component, 然后呢让spring去扫描,扫描完了之后把它变成一个binin,放到了这个bin map当中,也就是我们以前画的这幅图放到这个bin map当中,然后呢,再交由斯spring龙去经历他的生命周期,把他的这个这个病de变成一个病,最由终放到大概这里面,这种情况是最多的。那么说这么多,我就想告诉大家,我们前面看到的这个什么来了CCPPP,讲道理,你如果你想一下你是是不人作者,你有必要把这个CCPPP按照这套流程走嘛,对不对,通过这种什么什么什么放到里面,就是这样子,你是不是,你这个是不是做的这个容器都是你写的,这个单列是都是你写的,对不对,你现在想让这个对象实例化,你不知道自己把它溜出来,溜出来之后把它直接扔到单列子里面吗?为什么非得走这套流程呢?所以这就是我提的这个问题,这个问题可以大家好好思考一下,如果你有想法,有心得,可以我们来讨论一下,但是呢,不适合在本节课上面去讲这个东西,因为这个要展开展。
10:06
会是非常非常啊麻烦的好了。这里这个问题好好留意一下,那么我们接下来往后面再来我这里去解释这个问题啊,就是你可以顺着这个问题往下去思考。
我来说两句