00:00
好,同学们,我们继续,那么现在我们找到了我们的第四个断点,就这个方法完成我们的容器和相关病的初始化,再来一遍,一次一次的打,千锤百炼才能够出来,不要嫌烦,希望你耐得住单调,耐得住枯燥,耐得住重复,真本事一定是在痛苦中磨砺出来的。走起,再来一次debug,同学们,请看是不是到这后台没打出来吧,走。第二个断点。打在这儿。第三个断点打在这儿。第四个断点打在这儿,为什么你看我要是再往下走一步,你看是不是马上这些就出来了,所以说我们那些什么三级缓存的各种病的折腾,其实就在这个方法。内部就完成了,所以说我们有必要深入进去,这个方法,它到底内部又有哪些,就像这样一步一步一步的打下来,所以说同学们这才打完了多少。1/10都不到,真真正正的,请注意是这么多,一个框框就是一步,你看看有多少个框框你才能够把它吃透的。所以说,希望同学们不要害怕,如果到这儿你觉得烦了,那么请你关闭电脑,干脆就放弃吧,大厂也确确实实不是什么人都能进的。
01:17
OK,能坚持的请继续跟着杨哥往前走,我一定带你。真正真正的变成技术高手走起。那么下面。关闭,OK,所以说就告诉大家为什么第四个断点打在这儿,一步一步来。跟着下来以后,你对idea debug断点,你连spring源码的debug你都能干得出来,你的技术,你的内功怎么可能没有成长,走起再来一次。下一个下一个下一个,那么请看后台没有吧,扫干净,那么现在我们是不是要进去,OK,好,那接下来我们呢,就一步一步的走往下,你用快捷键也好,你用图标也罢,那么这个就是一步一步的往下走,没问题吧,那么现在。
02:02
这大家请看。这个病啊,等于多少SIZE2。猜都不用猜,应该知道什么意思啊,是不是开始要先形成容器,然后告诉容器里面要养两个B,养两条鱼,这个鱼缸里面有两条鱼,一条鱼叫A,一条鱼叫B啊,明白好,那么下面到负循环,那么请看触发初始化所有的非延时加载的。是吗?Single be死,你看注解是不是给你写着呢?那么走起,那么现在我们这个病也知道了,现在呢,是list干嘛ABOK吧。那么现在进来。好。进来先看看这个容器里面能不能得到变现在,那么你懂的,这个值的话,我们加载进来了以后,我们现在是不是要去加载这个A,没问题吧,那么好一步一步来,那么。往下走起,那么is factor b,现在这个A它是不是,它不是那么往下走,中间这一切通通都不过不重要的,我们就不看,避免同学们头昏脑胀,那么说明我们的第五个断点就是我们的这个get b就停留在这这一波OK吧,好,那么接下来同学们,我们。
03:16
进去,我现在呢。Get进来其实质而言,底层是有一个度。Get b那么这和大家说一下。说不定考题和面试官当中啊,这道题目我倒只听过一次啊。他说。你知不知道spring容器里面一度开头的是这些是什么意思啊?如果你读过spring源码的,你一定能回答出来面试官这个问题,听好,Spring容器里面spring源码里面的潜规则,凡是以这样小度开头的,就是真正真正的业务逻辑方法是干实事的,明白了吗?所以说我们在外面,我们是不是经常会用什么get b种东东?能跟上,实质而言,同学们,那么它底噪是调do getin这么一个方法,好,你看return To Getin说明什么?一定是方法重载对吧?那么我再进来。
04:11
好,现在是transfer for什么b name,那么这句什么意思啊,我直接往下走,请看这个b name是个啥叫A,那么现在什么意思呢?这个是有点类似于我们子容里面,看看你这个A有没有把它干作别名,呃,它的类似这样啊,我们死存容器里面是不是可以干这事就是。配置叫是A斯,这个见过吧,A,你又把它取个别名,类似于这样的,听懂了吧,那么现在我们这个里面没有,所以说这个呢,就无视不用管,那么接下来请看get single time,那么是不是我现在先往容器里面先要得到找这条鱼叫A的,这条鱼叫b name叫A嘛,那么好,现在我们的程序要到250行。打个断点没问题吧,Get增高,那么继续。干嘛进来?
05:01
请看啊。Get single time那么我把这段注释为什么要把它关掉呢?你码了以后就会发现。兄弟们。这个方法高亮显示以后,是不是这个方法的重载好,那么下面我继续。干嘛?进来好,这个方法再打一个保证同学们今天晚上回去以后能打通,那么现在就是这个B听懂甚至A,那么允你看允许早期暴露的引用这个值是多少,是错好了,那么现在它是这么干的,现在程序呢?已经到我们的第181行,现在你看this object有这么一个变量。同学们请看single object几级缓存一级,一级缓存是表示已经经历了完整生命周期的对象,就是放成品的地方,那么你告诉我,现在我们还有没有把A整出来呢?根本就没有,所以说这一行过这个100%应该是个烂听懂鱼缸里面还没有A呢,我们现在正在创建鱼缸初始化,正在鱼缸完了以后,是不是正在创建这个这条鱼A呀,所以说那么现在这个是什么?
06:11
是,那他就问你,那么现在这个A是不是正在被创建,也还没有呢,鱼竿都还没有搞好,搞好呢,听懂了吗?那么现在怎么着,是不是不进来,中间这段东西我们需要慢慢的来初始化,一点一滴的慢慢的加载。来返回single object。那么下面。下一步来同学们请看是不是返回了,那么再下一步OK,那么现在如果再次强调你要想进入这个方法就点这个,如果进过了再点它进不去。大家请看说明什么,我已经进去过了,好,那么现在共享这个实列,想从容器里面获得A有没有,没有正是因为没有,我们是不是才要创建这个A呀?这一波能跟上,那么请看,这是不是有个方法叫get single来打开脑图,三个map,三级缓存和四大方法,那么同学们请看。
07:05
上面是不是有个第一个方法叫get single,找得到你直接用你找不到,你是不是开始来创建,什么叫找得到呢?刚才我们已经点进去看过了,同学们请看这个东东是个什么东东。是不是刚才的第181行在这儿,是不是就是我们的看map谁是不是就一级缓存,它的意思是现在你先从spring容器,也就是spring里面的一级缓存里面去给我找这个A,这个有没有这个对象没有,刚才我们刚知道是不是个那而且这个A根本。只是探寻了一下,还没有在创建,所以说这一大段都直接没有进来,直接到这儿听懂,好,那么现在回到我们这儿,那么所以说我们现在从容器里面。第一个方法叫get single time。Get single有没有A没有呢?因为我们现在容器加载,我们先要知道我要加载哪些对象,第一步是不是要先要知道get single得到一个单对象叫A有没有没有没有是不是才需要去创建,才延伸出我们的第二步啊,所以说慢慢来,容器是这么一步步来的,那么下面呢。
08:12
都没有。都没有,那么并发这块没有。这个例思是什么呢?大家请看get parent并发出我们也没有加什么负类,我们这儿就是一个最简单的OK,没有实现什么容器之间的包含啊,或者有子父子关系好了,那么下面A还没有呢,但是注意。过到这儿标记这个病is created,那么说明是不是要开始对这个A动手了,要整A这条鱼准备往鱼缸里面养了。那么下面。走起走起,那么这些不重要的过,那么这个时候啊,同学们请看。Mbd主意。叫root并,就是也就是说啊,我们在容器里面叫一个个的并,但是在配置文件里面,也就是我们日常口语化说的,这个容器里面叫一个一个的并AB2个B,但是你到此框架底层,它都会把你高度的抽象,这个抽象成后就叫一个root并DeFinition,你看它叫什么?哎,有点类似于这个容器里面,它只认就这么一个对象,好比我们说过,在Java的世界里面一切皆对象,我管你叫你这个对象叫鸡猫狗鱼,在Java世界里面都叫object,那么一样在磁容器底层这种都叫root。
09:27
并DeFinition OK,好,那么下面继续。来这儿他就会问问你,你配置文件里面有没有派depend的on这个选项,我们这儿也没有过,大家请看这个是不是一个,那为什么呀,什么叫depend on呢?意思就是这样啊,我在这个我们的B里面,我没有说我要加载这个A的时候,我要先依赖谁先加载,就是没有配什么depend on,比方说这儿配这个C,意思就是说如果你A要生成,我还要依赖于C,听懂了吗?我们没有派这个选项,所以说这一步不需要过,那么我们也没有这个,因为我们用最简单最标准的先走大路走通,那么下面我们继续。
10:07
同学们咬紧牙,一步步往下走。走起重点来了,刚才我们已经到了第一步,是不是get single time,没有A嘛,没有以后我们要干什么,是不是叫创建do create b,好,那么这个是一个重点,请看create b instance,那么我们现在的断点,那么请看他,他就问你这个A是不是一个单立模式的,当然是了,我们这写不写,写是显示的定义,单列,不写默认是不是就是单列,这个大家都是知识,所以说搁到这儿321行,这个肯定是错,我们要进去。那么下面请看重点在这,这个就是我们的create b。杨哥,不对啊,这是不是这个叫杜病啊?我们是不是说过干活的永远是小杜?开头听懂了吧?好,我们断点打到这,能不能留一级,下一级我们再来。
我来说两句