00:00
到这儿get single这个方法我们算是见到了,那接下来我们进一步。讲解它里层又是什么一个运行机制,好,同学们请看get single time那么我们现在是不是要准备去拿A呀?好的,但是现在A还没建,还没建干嘛?是不是要do create b?那么这步怎么从第一步到第二步呢?走起。进来。同学们请看这个b name现在是几是A,这个是一个object factory这么11个single factor这么一个参数,好的,那么现在呢,我们一步一步往下走,走起,请看这他说是什么,看看哈,Map是谁呀,是不是就是我们的一级缓存,那你告诉我现在一级缓存里面有没有A呢?根本就没有往下,所以说这肯定是个钠,那么这个钠就给我进了,那么呢,来看看它这个其他的一些状态判断不重要,好。不重要的呢,我们呢,就快快的过好的走起。
01:03
在这儿呢?往下走,这一行打一个断点,请看它是不是到s factory从。大力池的工厂里面去get这个病,注意,此时我们进去你看。它到哪了,是不是又到我们的return create b这个方法呀,也就是说我现在的意思就是说我从容器里面去拿,拿谁拿这个A有没有,有你就直接给我,没有怎么办,没有的话我就反过来有点类似于回调这么一个创建并这么一个方法。自己动手,丰衣足食,自力更生。那么现在克瑞病这。进来。好,那么同学们。我们继续往下。走走走,那么现在我们要准备对谁动手了,是不是要准备对这个A要开始创建这个对象了,准备让他。
02:02
实例化了,那么相当于说这一行是不是要开始准备执行了,那么何以见得,请看后台是不是慢慢的也打印出来了,准备创建共享的这个提示啊,也已经有了,好,那么同学们我们一步一步慢慢来往下走,这个特别容易打飞了啊,这个断点,那么下面继续。往下走。走起,好,那么在这了,以后同学们我们往下走走,那么这个病就告诉你。现在还没有呢,对吧?没有,我们是不是要一步步往下开始进行创建,那么找到这516行,同学们终于看到了我们的一个东西叫do create,并开始,是不是就像调用一个构造方法一样开始?扭出来这么一个对象,通过反射,你看这个是不是我们的小AOK,那么这个就是我们的do create b知道怎么一步一步的从左到右过来了吧,有我们就拿,没有我们就自己建好的,那么同学们,我们往下翻,此时我们do create并。
03:07
进去,那么来请看这是不是又开始初始化这个病啊,好,那么同学们,我们接下来一步一步的走起走,它是不是单立模式啊,是的,在建之前你看它先要。清除一次,明白了吗?相当于说清空一下,那么当然现在我们什么都没有,无所谓这个方法。走起。找。搁到这儿,创建兵的实例进去,那么大家请看,一旦看到这种东西,是不是肯定100%是通过反射生成?好的,同学们,我们继续一步一步单步debug往下走。那么这些不重要的,我们就往下过,快快的走,走起,那么一直往这儿,那么它通过反射来检查它的一些其他的属性和东西,那么这是构造等等等等。快快的看一遍,这些都不是我们的核心,关键我们呢,就快快的过。
04:03
往下走,那么通过反射来检查一下它的构造方法什么之类的好。没有什么重点,我们往这儿退出去,好,这个就是我们的包装类,现在还是烂了啊你们。一步一步往下走,好,开始完了以后这一行一过,是不是才开始慢慢的创建这个。实力啊,那么。走起走起,那么请看现在是不是初步已经开始执行我们这个A。那么来,同学们慢慢的出来,我们呢,有一步我们就抓一步的图,好吧,那么现在呢,搁到这儿。好,那么接下来呢,我们继续开始这个A,完成它的实例化的工作。我们通过。框架内部的反射机制啊,往下走。一步一步走好,到这儿是否是布尔行啊,目前请看这个A,我们要创建的这个A是不是默认是单例模式的,当然是了,写不写这个默认就是单列,何况我们现在是不是明写,OK吧?第二步他问this这个对象是否允许循环依赖的这种引用,大家看这个是个什么?
05:19
这个是一个布尔值。天生是什么就是错,所以说spring框架单立模式下面是支持用三期缓存来解决这个循环依赖的,好的,那么同学们,我们走起。走起,现在这个值是什么?是不是出啊,同学们干嘛直接?进来进来好,重点。打个断点添加到single factory工厂里面,那么有点类似于就说你这个A建好了以后,我们是不是要把它添到这个spring容器工厂里面,听懂了吧?那么现在请看这是一个小A,注意这一圈是不是一个早期暴露出去的一个拉姆达表达式的一个。
06:03
这样的一个写法,好,这个也是一个后续可能会用得到,那么省得各种查找,我先把它抓图抓下来,好,同学们。现在到这儿了以后,我们直接进来好的,那么现在我们要干一件什么事呢?看它的框架是怎么弄的。第一步,Single object,看看map谁一级缓存它的意思问你一级缓存里面有没有现在这个A呢?我们前面讲过了,什么叫一级缓存?一级缓存表示已经经历了完整生命周期的并对象,就是我们所说的spring容器,现在这个A在不在一级缓存里面,根本没在,它自己还在慢慢的生成当中呢,所以说这个是没有的,没有的话它就是取一个false false,再取反整体,是不是就是真现在一级缓存里面。根本就没有我们的A这个对象,没有的话,取反是错。
07:01
进来,进来以后他干一件什么事?Single factor我们说过了,Factor是几级缓存,是三级缓存,然后你看他干一件什么事,请你把A。再加这个拉姆达表达式。就是刚才我们就这这圈听懂了吧,行李放到什么地方,先放到三级缓存里面,所以说我们现在。一级缓存里面没有,就先从三级缓存里面开始造,为什么它是一个并工厂明白,所以说在这儿我们干的第一步,第一件事情就是由我们这个T,就是我们这个小a value就是我们这个拉姆达。表达式啊,从这我们就得到第一个结论,我们现在是不是缺什么造什么,我们现在是不是先把我们的A开始慢慢的跟三级缓存接触,准备干它了,好,那么同学们,我们继续。
08:01
接下来有了以后,下一步他干什么?厄利亚是谁?二级缓存,再从二级缓存里面把这个A给它删掉,那么现在我们二级缓存里面根本就没有它,相当于是一个空山,无所谓,那么这个是我们一个注册,并跟我们没关系,我们又不管走起下一步走,那么现在请看587行执行完了以后,是不是完成了我们最重要的一步,将我们的A。造出来,并且准备把它先放到三级缓存里面,明白了吗?好的,那么同学们,那么接下来你看初始化这个病的实例么?开始开干。那么。下一步我们就已经完成了我们的do create,诶,下一步我们完成我们的do create病,那么下一步请看。干什么?打个断点populate b什么意思啊,是不是叫属性填充啊,也就是说慢慢的我们是不是从这个圈圈把A创造出来了以后开始到第三步是不是要进行我们。
09:04
对,A这个对象里面属性的填充,那么就是我还没讲你也应该反应过来,这我们算是先执行完了这个开始生成A了,那么在进行A的初始化过程当中,发现它需要有一个属性B,那么现在这个B就是个引用对象,那么我们有没有B这个对象呢?没有,那么是不是又要回过去跟A一样的套路和模式,又要新建这个B呀,所以说它就是这么一点点磨出来的。所以说同学们这。有点枯燥,但是对于你提升内功是非常有帮助,知道这个框架是怎么整的,那么好,同学们,我们在这儿呢,就清楚,现在A已经在三级缓存里面给我待着了,好,那么同学们,我们这儿。Populate这个单词啊,是是吗?属性填充的意思,那么填充填充什么呢?要往A里面,那么请看这个A是这么一个意思,它的包装类OK吧,那下面我们直接populate这个方法进来好的。
10:04
这些注释呢,我们把它呢。关闭一下好看啊,那么下面一步一步找那么同学们。走起好。走起。走什么意思啊,Pop。Property values。告诉你A里面检测完了以后长度是一,只有一个属性,A里面需要有一个。引用类型叫属性B这么一个,你看它是是不是自己内部啊,就弄出来,那么就跟我刚才所说的,现在我已经探索出来了,它需要有一个B,那么现在有没有这个B呢?没有,那么是不是容器又要像生成A一样去生成B啊好,我们可以推测出来,我们来看源码证明,那么下面。这些不重要,不重要的话呢,我们就快快的过好,主要是明白它的这个流程,那么到这儿。运用这个属性给它注入进去。进来,那么大家请看,我们继续往下走,走走好,那跑到这了以后,这有这么两个orange,那么它开始对这个。
11:08
A进行一下盘点,那么请看搁到这儿了以后明白了,这个A里面是不是应该要有一个property?属性B,那么现在开始给它整合,那么来找找有没有这个B,没有没有个B怎么办?是不是也就像这样去容器里面拿B,没有是不是也要建这个B啊,好的,那么看看我们的推测,根据源码分析怎么正确好下一步一步一步的往下走,走走起。走起,走起,走起走起,请看property name叫什么叫B,现在是A慢慢的已经整出来了,但是现在我们需要用到A里面一个属性,B没有的话,我们是不是又要进一步的生成?好,那么过来这儿好的同学们,Resolve这个value if necessary OK,在这打个断点进去,那么同学们请看这个value现在是不是run time be啊,其实说穿了有点类似于说我们现在呀,要整这个B了,OK,要对这个B下手了,那么现在我们一步一步的。
12:11
进来。进来,那么请看这个瑞法,就是引用,引用谁要引用B,那么现在你告诉我有没有B呢?没有呢,那么现在我们是不是要有一个方法来解决这些引用关系,进去,那么好,再通过反射,我们来看看这个B又是什么,那么。我们也不需要。有你这些什么复工厂这些病,好吧,那么我们继续往下走。下一步。下一步请看我要生成什么,要解决B这个引用问题,这一波O不OK,好,你们你看这这个瑞法是不是有个小B,很很很明显,A我们已经读完这一行了,现在明白了,它里面长度有一个是一的,有一个叫B的属性,这是个瑞,好。跑到这儿。打个断点,我们要从B容器里面得到这个B,我们现在需要B,是不是要从什么容器里面找?那么现在再进去,你看跟刚才是不是一样,Do get b是不是见过一次了?好,再进来,来,同学们往下走,又没有什么别名的困扰,还是get single time,相当于说我们现在。
13:19
建完A以后需要给A填充属性B,那么有没有没有我们再去容器中想get single,那么告诉我,你看是不是又是一样的套路回到这儿了,同学们。进来。那么get single再进来,好的,那么下面。Single是什么?是一个几级缓存,一级缓存好的。现在一级缓存里面有没有没有。往下走。现在这个值是个什么?是个那那么再往下为什么是个那因为现在B还没有呢,也没有正在被创建,所以说现在说明什么,那没有变。
14:00
我们第一次调用get single去容器里面拿B,有没有没有,这是个,那没有应该干嘛,是不是create好的,那么现在走起。走起,那么现在再走好得到了这个需要的共享实力是一个捺听懂,那么好,我们现在是不是要准备来造这个B了?好的,那么接下来你看还是跟刚才一样,什么负类的并工产不需要,然后又是什么depend on不需要,那么所以说你看我又直接快快的回到这儿,上一次啊是造造这个A,这一次是造谁了,这一次是不是要开始造我们的B了?明白,他就是这样一步一步这么过来的。好同学们,那么现在不废话,直接再一次get single time。过了那么好了,跟刚才一样,Get single里面有没有?过来过来,那么这是什么?一级缓存里面想去拿B。
15:00
根本就没有OK,所以说这个东东就是个烂。进去进去好,和刚才一样。那么容器里面没有,我们是不是就需要回到我们的226行single factory?那么前面讲过了single factory是不是表示从放生成病的工厂没有,我们是不是要通过工厂去造啊?那么从工厂里面拿到这个get object,所以说你看现在只要达到226行,底下是不是会冒出来一个创建共享的实例single并。B是不是开始建第二个对象B了?好,同学们直接过来进来。请看是不是又回到工,现在容器里面没有,没有就送到工厂里面去建,那么又回到了我们的create并这个方法,现在见的就是小B了,OK,那么进来,那么大家请看这是create b,那么跟刚才见A的过程是不是几乎是雷同啊,那么好,过了这儿,那么这些不再废话,直接到这一步,听懂上面的不重要,不看了,直接点这个到下一个断点。那么你看是不是又第二次到do create b,只不过这次见的是谁,见的是B,那么好,同学们,Do create b进来。
16:20
好的,那么。搁到这儿,往下走,往下走走。走,又是create并instance,现在是见谁,是不是见B,那么是不是也要梳理B有需要哪些属性,跟刚才那个A是一回事,那么好,再进来带着大家多打几步,那么我们继续往下一步一步的过。反射b class,那么现在我们要见的是什么?是不是从A要开始见B了?好的,那么走走走走走,这一切切还是跟刚才一样的,这么说,同学们能跟上咱们。走起,走起,走起,那么这些不重要的。我们呢,不废话。直接过,直接过好的过,那么又是反射里面去梳理一下这些构造方法,我们都是非常简单的,那么完成这个病的初始化了。
17:10
走,那么现在。走。糟,那么大家请看是不是也是开始准备生成这么一个病了,那么在这儿我们呢,也给大家呢做一个补充,OK,抓个图吧,方便大家后续的复习,好的,那么现在呢。我们继续一步一步的往下走好。走起,走起,走起好。那么到这儿还是跟刚才一样,你们请看是不是又会跑到587行直接到这儿,那么跟刚才前面是键A,现在是不是件B,你看是不是还是刚才那个拉姆达表达式啊,听懂了吗?这个拉姆达表达式就是准备把它送到并工厂里面,由工厂生成这个通道,那么现在直接再进来。和刚才的判断一回事。同学们请看。
18:00
接下来下来single object,看看map一级缓存里面有没有现在我们的这个B没有,没有怎么办?是false false取法怎么办?是进来请看single time factor是什么意思啊,是不是就是我们的三级缓存,然后它的意思是请你把。B。然后再把single发出,你看是不是就是我们的什么。拉姆的表达式啊,也请你存放到我们的三级缓存里面,和刚才一样,照旧再把它从二级缓存里面删掉,并进行注册。所以说通过这几步。放到三级缓存清理,二级缓存填充注册,这么说能跟上,那么我们这前面也说过了,这个就是我们那个拉姆达表达式,OK吧,那么我们得到了第二个东西,那么现在就是我们的对象。T。小B这个值也是一个,生成一个拉姆达。
19:05
表达式啊,也就放进了我们的是吗?三级缓存里面,同学们这块一定要把握住,OK吧,好,那么我们继续分析源代码,那么接下来呢,我们呢,下一步走起走起,好那么一样,现在是这个。B是不是也就完成了初始化通通过工厂生成了,那么相当于说跟A的重复是不是一样。那么走起我们。一步一步来。那么。接下来是不是也开始进行属性的填充,以前是A,现在是不是B啊,那么好的我们。进来。进来了以后,挨个我们逐步逐步的往下走,那么不重要的我们就过往下走。再往下走,那么同学们请看,说明我们现在把B生成好了以后,也要相当于说现在读了B这行了,也发现B它也需要有个属性要引用,哎,你看AB是不是循环引用开始了,那么这个时候同学们请看我们这个B里面property values。
20:13
有一个属性需要,这个属性是b property是A,相关的引用好的,那么同学们,我们继续。走这些不重要的,我们就不再看了,好往下走走,那么挨个挨个直到我们这个,那么。直接到这一步好吗?然后再直接进去看看,那么现在是不是要为我们的B去填充A了。好,现在告诉你。走起走起,那么好,挨个挨个的去填充。来吧,这些不重要的,我们快快的过好。走起,和刚才一样,这个orange属性几啊,是不是就应该是一个1SIZE是多少,是不是告诉你这个B里面也应该有一个属性叫小A啊,好,那么和刚才是一回事,那么下面走了。
21:06
走走。又搁到这儿,我们呢,来到了我们之前打好的断点,你看基本上就是这样一个大的轮回,大的一个。嵌套,那么你看B里面有个property是什么?是A没问题吧,好的,那么。我们继续往下走。搁到这儿了,以后来解决,如果需要的话解决这些引用。走起,那么我们呢,继续往下。往下进到这个方法,然后各种的一折腾,然后前面和刚才那个A一回事,进来进来好。现在我们需要你解决的属性是谁,是不是B里面要整个A,那么一样,我们去b factor里面去get这个B,相当于说想去拿一下这个A,好的,那么现在我们进来。Do get b。
22:01
进来好,没有什么别名的困惑,直接过来,直接在是什么,Get single time,我们。要往B里面填充属性A,所以说我们要现在要去拿这个A进来,好在进来。OK,那么现在呢,我们来看看啊,一步一步的往下走。首先我们single谈object说过了,一级缓存里面现在有没有我的A,没有我们的A干嘛往下走,那么现在进来为什么这个时呢?但是我们现在这个A已经在什么地方了?是不是已经在我们的三级缓存里面,说明它是什么,是不是正在建造中?好的,那么接下来同学们,我们继续一步一步小心翼翼的答,Debug,那么过来。搁到这儿,大家请看earlier single object是什么?是不是就是我们的?什么东西啊,二级缓存里面,那你告诉我现在二级缓存里面有没有A,那么同学们我们小步小步的过来,请大家看一下这个应该什么,是不是none啊,确确实实现在二级缓存里面是不是根本就没有任何东西啊,那么过来。
23:09
这个值是什么,是处处就说明什么,一级缓存里面找不到,我就去二级缓存里面去找,二级缓存里面找不到我干什么,是不是再去我们的三级缓存里面去找啊,那么现在你告诉我三级缓存是这个。Single factor get b name,这个是几是A,你告诉我现在三级缓存里面有没有I,当然有了,所以说。大家请看我们这儿过来。不等于烂吧,非常正确。那么。在这儿我们也看一眼think factory get object,明白吗?那么现在你告诉我这个里面它有没有?当然有了,那么请看。是哪一个,是不是就是刚才我们所说过的这个三级缓存里面T叫a value是不是叫这个拉姆达表达式啊,你看是不是跳到这个拉姆表达式了,那么下面呢,同学们,我们直接。
24:07
去哪?再过来进行一个处理,那么同学们请看一眼。一步一步的走,那么现在过来我们呢,有这么一个A过来返回这个A听到,那么。通过这个拉姆的表达式没问题吧,那么好,现在我们就得到了我们的这个A,现在才是我们从工厂里面通过那个拉姆的表达式弄出来这个A,将其完善,然后现在你看他干一件什么事,再。This single2级缓冲里面把。A。Value叫A对象2062,这个对象给我弄到二级缓存里面,听懂了吧,然后再从什么。三级缓存里面把这个小A给我删掉,明白,所以说在这儿才是真正真正厉害和要命的,那么现在我们二级缓存里面是不是就有了一个key叫a single object就不再是拉姆的表达式,那个拉姆的表达式被用掉了,生成了一个A。
25:18
二零。六二这么一个。好,那么同学们所以说现在就变成。A,他呢?T是叫A。Value是不是A2062这么一个对象真真正正的就生成了,并且从原来的三级缓存,通过拉姆达表达式的实际建造升到了我们的二级缓存,听到也就说是吗?半成品这个A就出来了,并且框架干的比较狠,毁尸灭迹从三级。A升到了。这个二级了以后,还把三级里面的这个A给我删掉,明白,所以说我们现在干了一件事呢,就是这个A就没有了。
26:10
明白A呢,就已经移到移步到了我们的二级缓存2062这么一个东西,这这么说能跟上A。艾特2062,那么不妨我们点开看看,现在A有了,自然而然也把它搞定了,它也需要一个属性,你看field的是不是字段属性是B,但是我们现在这个B是什么,还是难呢?听懂好。那么现在下一步,下一步返回什么?就把我们的A到这,这个A算是半成品出来了,那么现在a at2062 a at2062 OK,我们的继续往下走。走起,那么现在get这个A,我们来看看,那么。能不能得到?同学们是不是可以得到这个A艾特2062了,好的,一步步完善啊,这块挺不容易的,跟着走,同学们走起走起。那么在这。
27:08
过来,那么好,我们继续往下。那么现在呢,还是跟刚才一样啊,一步一步的往下走,那么return这个b a at2062好。好。那么这就完成准备出来了,那么这个就是我们的注册,我们的depending依赖的病。OK,那么大家请看完火以后啊,那么这个方法呢。我们呢,就可以看到解决了这个问题,是不是我们的A就给它出现了,好的,那么接下来返回我们的A。走起。走起好,那么同学们继续一步一步慢慢的往下调,那么请看现在我们是不是就有一个A出来了,但是它里面这个B还没有填充走起,那么现在呢,一步一步往下走走。
28:02
好,那么现在呢,我们呢,继续往下。往下。那么一直找到我们之前打过的这个断点啊。那么走起,走起,那么。对应的一些元素的处理我们就不看了,不重要的,那么继续往下,那么请大家看,一直到这步以后我们才会明白,那么现在是不是完成我们对应的属性的填充,OK吧,那么set properties,那么这一个new的这么一个对象,我们可以简单的看一下它是我们的什么,是不是就是我们要为这个B填充这个A属性啊,好的。我们呢?翻过来,翻过来。走到这儿,你看处理这些属性的填充。欧了。那么在这了以后,那么同学们expose,那么我们呢,也可以翻查进去,初始化这个病翻查进去看看。
29:00
那么同学们那么一步一步的走起。周期,那么这些我们呢,大致的过一遍,它就是混个眼熟,那么现在这个包装病,那么我们可以看看,那么这个B是不是现在就已经填充好这个A2062了,这么说能跟上,你看A生成以后,是不是慢慢的B引用进来就OK了,好的,那么框架就把我们完成了这些相关的内容,那么走起。那么我们暴露出来的对象,现在就是我们的B2525好,那么现在呢,我们呢,一步步往下填充,继续。过了。这怎么处?搁到这儿,请大家看又是什么get single了,那么现在呢?我们把断点打到这儿进去,你看还是我们以前的这些熟悉的配方,那么A生成完了以后是不是要去干B了?那么现在这个B我完成一个什么事呢?
30:02
走起。现在在一级缓存里面有没有我们的B没有,所以说这是个什么,是个na,好,现在这个B是不是也在生成当中,是的,所以说进来,那么进来再来看,再从二级缓存里面先去找我们这个B现在有没有,当然是是吗?没有的,那么再来看这个缓存里面是什么,是false,那么不同。我们的三级缓存里面找了这么说能跟上,所以说B就不进来,那么在这我们这就是个难,OK那么好。由于它这是个难啊,我们这个B。听到没有从三级缓存里面去找P,那么。过来。那如果注册这个注册一个病,那么我们。不进圈不重要,往下走。好。这个是do。Create b,那么现在这个慢慢的是不是就开始创建好了,这一波能跟上好,那么继续。
31:06
我们往下翻,那又回到我们刚才这个又回到这儿,那么接下来我们往下走。走。After single creation,那么这个B是不是慢慢的创建好了,那么过来。过来这个new single是不是新创建的,是新创建完了以后就直接到这儿,我们属性填充完了以后,是不是要整第四个最后一个方法叫A的新构成了,是不是要把它加到我们最终的这个容器里面了,好的,我们同学们。进来,那么来又回到我们的这个类似的这样的方法,那么现在是B,那么往下。进来。请看single time。Object几级缓存,一级缓存,然后是干什么?请把B。然后给我们生成的这个2525的这个B,这么说能跟上,直接放到我们的一级缓存里面,听懂了吧,那么。
32:04
我们之前是不是也给大家。简单的记录过,我们之前生成这个B是不是叫2525能跟上,所以说通过前面我们也看到了,这个B也已经生成了,那么这个B现在把它放到什么地方,直接给我把它放到一级缓存里面,这个B是多少B2525,然后剩下的事情是干什么,先从。是吗?三级缓存里面删掉B,再从是吗?二级缓存里面删掉B,然后再注册完成,听懂了吧,注意这个B直接是从三级缓存,然后到什么地方了,一级缓存,所以说现在我们的效果就是。这个。T。小B。Value等于什么?B2525就已经在了。我们的。一级缓存里面请大家这个是不是b name等于小B,这个是不是我们的BAT2525听懂,那么通过这个框架的。
33:10
折腾和证明现在这个B里面是不是也就把A注进去,A是不是我们的A艾特2062,那么A里面。回答,我还有没有住进去?B呢?没有呢,我们完成了75%好。那么现在完成这波以后我们过下来诶。我们过下来,然后接下来的活,是不是就把这个给。干掉,为什么?因为原代码已经说了,请你把这个B从三级缓存里面清空,再从二级缓存里面清空,总之一句话,现在这个B就变成了成品,因为我们是不是先生成了这个I。A2062有了吧,那么现在这个B是不是就直接可以给它初始化完成,先送到我们的一级缓存里面,听懂好,那么接下来呢。我们呢,可以看得出A2062好,那么现在。
34:03
完活下一步下一步下一步,那么返回我们的B 2525,那么走起,那么现在我们彻彻底底完成了我们的B,好,那么现在呢。Get。这个不是重要的,过来过来,返回我们的B。Getar。在这儿并factory get b没有,那么在这块也不需要进去走起,那么相当于说通过这样的一种内存的移动。完成了。我们。C跟B之间的相关的相互引用,好,那么一步一步往下走,走起。好,那么。我们呢,回到我们的这个上一步。也可以再进去看看,OK,走。招。好。往下走走走,那么一样,搁到这儿了以后和之前的。
35:03
一回事,这个时候是不是要解决A这个问题了,那么好,A里面也要有这个属性B,好的,那么我们往下继续继续继续。再往下,再往下,再往下再往下走,这些不重要的就快快的过好,那么搁到这儿,我们直接再进去好的,那么现在我们呢,B是有了,我们现在是不是要传的参数,是不是要解决A这个问题了,那么好。进来,那么。前面的都有了,我们就快快的过,又到下一个断点,这个断点这儿我们直接进来好,进来好。过来这现在。进来再进来,好,同学们请看它的意思是一级缓存里面请看一下有没有这个B。好,肯定有了吧,那么现在。
36:02
过来。过了。往下翻,那么现在大家请看这个B艾特225,我们前面讲过,那么一步一步往下走,还是刚才的那段代码,那么。走起,这个B,彻彻底底我们将其解决和返回。那么。往下。再往下好。那么走起。我们呢,继续找。走。好完成这些属性的匹配。好。完成。那么早。OK,那么现在我们呢,中学也走到了这个方法,那么慢慢的接近尾声,请同学们再坚持一下,那么现在大家请看我们是不是开始要对A进行处理了,那么好,那么现在啊,我们来继续。
37:04
B完成以后,我们来折腾一下我们的A。那么。搁到这儿,走到这儿。再找。一步步答好。那么。完火以后也是这样。往下走也要get a,那么好进来。现在B完成了整A,注意这个是什么,是false了,听懂了吧,就是不再从三级缓存找了,那么往下继续,现在请看先从一级缓存里面能不能找到AB已经完成了。处理并完善我们的A,现在这个是个什么,是个那好。继续,那么现在是不是正在创建这个完善这个A呢?是的,那么现在进来。那么再来看,他说请从二级缓存里面去找一下有没有这个A,那么同学们请看我们的二级缓存里面有没有这个A,当然有了,那么所以说继续往下走,那么大家请看这个时候是什么,是不是我们的A艾特2062,请看是不是A艾特2062对上了吧,然后干什么?
38:11
那么现在。就给我把这个A。直接返回,那么大家请看这个A是不是2062也就返回了,那么返回了以后。过来走。走,那么进来,那么好,我们在块返回我们的A2062,那么好,这个do create ba2062也就算完成了,好,那么走起。创建好了再拿过来,那么现在这个A是不是新的,是的,那么这个时候是不是它真真正正B也完成了,A开始也可以用它了,那么现在走起。走起,走起,走起。中学到我们这儿,At single timea是不是也到最后一步?A at single time,那么好,那么同学们过来。进来。来干一件什么事。现在。
39:03
先给我去一级缓存里面去找。这个A这么说能跟上,那么大家请看。直接呢,需要现在这个是put,那么现在是不是要把我们的这个A直接再放到我们的一级缓存里面啊,因为现在这A是不是也就是个产品了,那么大家请看这是一个什么葡萄放进去,把A2062放到我们的什么一级缓存产品里面,然后干什么把它从三级缓存,再把它从二级缓存删除,所以说我们一步一步来,终于可以对这个A进行最终的完善和处理这个A。在这,然后这是个什么a at特2062,要把这个a put进我们的一级缓存,所以说在这了以后,这个A也就put特了到一级缓存,那么这样这两个是都从三级慢慢的弄到了一级,从工厂生成,慢慢的都变成了成品啊好,那么接下来你看框架里面还做了什么事。
40:08
然后呢,Put进去以后把A。放到了一级缓存里面,然后再把它从什么地方。Single factor啊,这个是什么?是不是三级缓存里面删掉,然后再从什么二级缓存里面删掉,那么这个时候是不是A是从三级再到二级,再到一级,可是我们的B是先从三级,然后直接到了我们的一级,明白了吧,所以说它是靠这样一步一步的把底层的缓存给你弄出来的,好那么搁到这算是大功告成,差不多结束,你看看从左到右抽象以后,表面上是四个方法,但是第八个断点,你要一步一步的把它打通,真的是挺不容易的,好那么同学们,我们呢?完成了以后,A跟B现在是不是一步一步的都到了我们的二级缓存,再到了我们的一级缓存啊,听懂,那么这样的挨个挨个的上来,OK,那么现在走起。
41:07
那么过来过来。来这个。B完成以后是不是A,也就慢慢的最后完善是A呀,他们两个都是先从缓存。这样的从三级,然后逐个按照各自特性,该区二级的去二级,该去一级的去一级,最终两个都在一级成品区对外暴露提供服务,那么这do get,那么get b,这个也就是A了,好,那么彻彻底底结束,那么大家请看现在我们在。调用的时候是不是就有这些东西了,那么你看返回我们的B。然后再调用,那么get single time,那么搁到这儿了,以后慢慢的好,你看我们称为return b就回去了,Get b。过来,过来,过来,快快的,后面这些已经不重要了,咱们走起。来同学们,最后你看是不是又回到了我们最初打断点的地方啊,能跟上,然后的话呢,我们继续下一步,你看又回退到了我们的最终的finish refresh,再下一步,再下一步,那么同学们,当然这个就不是我们的了啊,实际上系统自身还有一些加载的东西,那么这个就跟我们没什么太大的关系了,那么。
42:20
AB,好,最终同学们,我们彻彻底底退出来,完成了我们的全部debug断点,那么所以说同学们,这个请跟着杨哥呢,可以打一遍。
我来说两句