00:00
那么这个动态代理这个例子呢,咱们就写完了啊,对大家的要求呢,就是说呃,不要求大家下来呢,非得把这个代码呢,都得自己写出来,不要求啊,就是你能够看一下我刚才写的这个例子,大概能明白这里边这个逻辑,哎,就可以了啊,那对大家的要求是什么呢?就是你能知道哈,咱们这个动态代理啊,它确实属于我们讲的这个反射的一个应用,反射的主要特点就是体现它这种动态性,那么这里当然也确实体现了,就是因为我们这个代理类,我们没有在编译的时候呢给它显示的定义,而是呢,在运行的时候呢,根据你传进来的这个被代理对象是谁,我们动态的帮你创建的,体现了反射的动态性,只需要大家能够理解这个事就可以了,至于说呢,呃,关于动态代理怎么去理解大家呢?哎,怎么去应用,等到后边讲到框架的时候再说。啊,那么框架呢,咱们一开始也提到了,里边呢一个核心呢,Spring当中就叫up up啊什么叫A,面向切面编程简单的,我们让大家呢感受一下啊哎,我下边呢说一下这个动态代理和a up。
01:04
啊,简单提一下,前面的话呢,咱们要想实现这个动态代理,用到了一个类叫pro,用到了一个接口叫invocation handler说呢很难看出这种动态代理的优势,下面呢,介绍了一种更为实用的动态代理机制,哎,看这个问题啊,咱们以前呢,也写过类似这样的代码,这叫代码段123,那么这三个代码段当中呢,会出现相同的代码段,比如说你这呢是这个冒泡排序,这个呢叫呃,选择排序,这个呢希尔排序啊,快速排序等等。不同的这个排序方式多少呢,我们都会涉及到交换两个位置上的元素,那那这呢,就属于这种相同的代码,那相同的代码呢,你在每个代码片段中都去写,显然呢,感觉有点冗余。啊,那我们就会考虑到把相同的这个代码呢,我们抽取出来造成一个方法。方法造完以后,我们只需要在代码段123当中去调我们这个方法就可以了,诶咱们之前呢,是不是也做过类似这样的事吧,对,感觉太漂亮了,非常完美是吧?哎,但这里边他又说了,说呢,改进以后啊,代码段123和深色的代码段呢分离了,就是咱们原来的这个啊分离了,但是呢,这个代码段123呢,又和一个特定的方法A耦合了。
02:20
相当于你在代码段123当中写死了这个方法A了,说呢,呃,我们最理想的效果是什么呢?说代码段123呀,它既可以执行方法A啊,又无需在程序当中以硬编码的方式呢,直接调用深色代码对应的这个方法A。硬编码就是说你在编译时候,这不就写死了吗,那个方法一在这写死了,现在就想说能不能这个方法呀,动态起来。我想掉A就掉A,想掉B就掉B。其实好多男人不都有这种想法是吧?啊,既想跟喜欢某个女生,但是又希望呢,就是能脱手的时候呢,都能脱手是吧,别难粘着自己是吧?哎,就是这里边呢,诶我们希望呢,能够灵活一些啊啊怎么办呢?诶这个时候呢,哎,我们就提到动态代理了,可以做这个事儿啊像这个呢,想实现一个效果呢,不就是这样个情况吗。
03:12
A op面上切面从横向来看啊,这呢是一个方法啊,这是一个方法,中间这个方法的话呢,你可以把它想象成是一个动态的啊,你想放哪个方法,我这块呢就可以换掉是吧?哎,用它我就放到这儿,不想用它我就换成别的。那反正呢,你这个是一个固定的上面这两个呢,就是可以动态的换的啊,这有面向切面的一种编程,那我们简单体会一下啊,在咱们刚才写的这个例子的基础之上,怎么体现这种特点啊,怎么体现这种特点。放大一点吧,嗯,这儿呢,我们这样来做啊。这是上面咱们的一个接口,这是一个背带类,诶我呢去提供一个啊class,哎,不妨呢,我叫做这个human YouTube。哎,这呢叫黑命球,在这里边呢,我写两个方法,我叫METHOD1。
04:06
哎,这呢,我们写个叫,嗯,通用方法一。哎,通用方法一,比如我们整一些这个。这一下这个符号吧。CRC。那具体这个逻辑的话呢,我就不去写了啊,咱们只是体现它被调用过,写一个再来一个public word method2啊,这张叫通用方法二。行,这两个方法呢,哎,我希望它充当的就是这里边儿的这个和这个啊,中间这个方法呢,我们想让它换,就是所谓的你别把这个方法A。别把这个方法A给写死了,那我们现在呢,把这个类在哪用一下呢,咱们回到咱们的这个引的位置,在这个引诱雕的时候呢,其实你也知道这个method是不是就来回换。
05:08
他不知道你到底要调的是谁是吧?诶,这不就正好体验这样的一个点嘛,我们在这个代码一上来的时候呢,我们就先呃human YouTube造个对象。哎,我们比如就叫做这个U了啊,等于你一个。嗯,叫human的YouTube,哎,造完对象以后,我们在这个位置呢,点去调一下这个METHOD1。哎,这张就掉下了啊,CTRLCL一下,然后当我们这个,呃,你这个引用和方法调用完以后,哎,我们在这块。哎,在这块呢,我们再去调一下这个METHOD2。哎,你看这时候这个场景其实就类似于我们这里边儿的这个场景了。这里边儿这个方法,你看我们在这里边儿呢,是不确定的一个方法。呃,然后呢,当我们下边你调这个get belief也好,调it也好,调这个produce close也好,这三个方法其实就充当了这个method,呃,在这个method它是可以不断变化的,而上面的这个逻辑跟这个逻辑呢是不变的,哎,你看我们执行一下哈。
06:11
那就出来这样的情况了。啊,第一个第一个方法一方二中间没东西,是因为咱们掉这个get的belief里边咱们没有写C的啊,所以看到好像里边没东西了,哎,然后下边这块呢,啊,这个这个它这是因为咱们在这不是给输出了吗?是这个原因啊写到这了,然后下边当我们去调用这个E的方法的时候,哎,整体执行呢,这不就是这段逻辑吗。哎,当我们去调用下边这个耐克这个方法的时候,哎,整体呢,体现的这不就是这个逻辑吗?哎,中间这个位置,你看这个方法呢,我们可以不断的去换啊,就是面向切面编程的一种体现啊,那这块的话呢,大家也是,呃,先作为一个了解就可以啊,具体的到框架的时候呢,再说成,那我们就关于a op与动态代理呢,就了解到这个程度就行,整体上来讲,大家呢,也是清楚这个事儿就行,哎不用呢,下来把这个代码非得要写的很熟,现在呢,在基础阶段还不强多要求。
我来说两句