00:00
这里呢,我们看到的就是说我们现在当我们执行点shell的时候,它执行代码是哪里呢?是我们的这个proy在创建时指定这个hand得了。只能是它里边的invo方法这个handle了,你注意看,它这里不是有个invoke吗?是只这。啊,不行,你打个断点吧,还打个断点啊。代码上往下走,当走这的时候,这只用目标方法吧,所以会输出目标方法的执行程序,再往下走。再往下走,这块是给的价,价格25,再往下走输出这里。说出这句话,所以这是给了一个红包,然后return r s GIS,就是加了25的一百一的价格,所以你得到是一百一的结果,就这样来完成的。我现在打这个断点,我现在再来执行程序。
01:00
用debug模式来执行这个程序啊。第八。我们应该在这儿再打断点。那程一中你看啊,我们是不是找到这个VO里边了,注意看是in handle时间内invo f8单执行。当走到这的时候,这只有目标方法嘛,你看这参数啊,看那个method。看这个麦的信息啊。还是我们的。USB接口中的shell方法吗?那么这个阿斯是什么呢?是我们传那个一。它是个数组,第一个参数就是那个一整形值啊一,你看在这呢嘛,你就买了一个嘛,所以这些参数呢,都不需要你去负,是JDK给你附上去的,你的成语中你执行的是这个shell方法。这个参数不是一吗?那么这个shell就覆盖了。
02:00
这个method,然后呢,你执行的这个参数是一到111在这儿呢,这个一哎就付给了你程序中的这个二的四付给他了啊。然后你在这,这个tIgEr是谁呢?是我们常见那个factory呀。是我们的USB factory,那就表示我们要执行的是这个类中的。Shell。参数是一啊,所以这就目标方法了。那目标方法的话,那我们看USB factory在这儿。打断你。那你看是走到这了,所以这块的目标类执行,然后85再往下这个res就是你的目标方法的成结果85啊。然后这是加数。往下走。再往下走到这res返回一百一啊,最后返回了。
03:01
那这块呢,我们已经执行了这个shell吗。它最后反值是110,给了这个price。所以这往后来,哎,你看这是一百一的价格就出来了啊,110,所以程序呢,到这就听完毕了,那我们能看到我们这个结果啊结果。用结果这个目标方法得优惠券。最后的结果是110,这就是动态代理的一个实现的方式,它的步骤啊是固定的,也就是说这块的步骤是固定的,就是这么一个写法包,这个参数也是一种固定的写法,通过反射来获取类的加载器,获取的是你的接口,然后呢,这是执行你的功能的handle,得了就完事了。通过C调用方法就能实现我们代理的一个功能了。那这里边儿它有什么优势呢?就是说不用你创建那个淘宝类了。对比的静态代理的话呢,那它程序中你看。
04:03
这块这些类。都不用创建了吧,这它的优势类呢,不用创建了,再一个就是说你假如说你改了接口了。你说你在这个里边。还有这个含到里边,你把这个。我看一下啊,我们的这个接口在这的。比如说这你改了一个内容,你增加了一个方法叫做print,你这加完之后呢。只是它受到影响,它会受到影响啊。实现我们这个方法它受到影响,但是其他的剩下的这些类都没什么影响。代理类没有任何的影响,影响面就小了很多了,这是动态代理的一个优势,一个是不需要再有很多的类了,再有就是说你改动代码时候影响非常的小。啊,最起码来说我们的代理类像这些都没受到任何的影响嘛。
05:05
影响面小,这是它的一个优势,那它的劣势就是什么呢?难懂呗,它没有静态待正方直观。但最终实现的时候呢,实际上就是这么几步就完事了,这是你的目标对象,先准备好,我们要给给他创建代理。用的就是new,呃,Intense,它创建一个代理了,这个代理里边呢,会通过这个handle了来表示你要完成的功能是什么,功能是什么啊,那这个proxy是不是一个对象呢?是什么样的对象呢?我给你看一下。这个pro get class反射其实看名字啊,看这是个什么名呢。
06:00
他的名字往上来是这个。叫y com点3Y0啊。这个实际上是它啊,这是JDK动态代理创建的对象类型。样的类型,就是说呢,我们的这个proxy啊,它实际上是这个类的一个对象。就是JDK里边机制所完成啊,你就知道看到这个标识,它一定是JDK的动态代理就行了。嗯,再往里再看的话,这就很深了啊,我们暂时先不看了,大家会容易迷惑的,你就知道这个PC0呢,实际上是这个对象的类型。我们在讲章的时候,每一个对象就都是属于某一个类的呀,一个对象属于某一个类的吗?
07:01
比方说你创建一个student my student new,一个student,那这个时候你这个MY是这个类型的吧,那同样你的proxy是这个类型的。这个道理是一样的,只不过这个类型呢,是JDK中它固定好的一个值了,不需要你去管理啊,那直观的你就按照我们的这几个步骤。就能完成动态代理对象功能的实现了,就可以了,那这样的话呢,我们就可以在。我们的invocation憨德勒。在它这个里边,我们可以完成呢,目标方法功能的调用,然后呢,可以额外的去增加一些功能,这就是我们要达到的目的,我们干的事情就是动态代理的一个实现机制啊。好,我回来,我看看我的程序中。
08:04
有一个红色的哦,是这个它是没有的啊。行了,这就是JDK的动态代理,你有所了解就行了,我不需要你掌握它啊,我也不需要你抠是吧,看里边啊,我们这个参数都是什么什么东西,这个参数怎么怎么理解,你不需要不需要啊,像这些内容你知道大概什么意思就可以了,我都不需要你去了解它,不需要你掌握它啊。说它是什么什么东西,你不需要了解很深,你就知道,它代表的是我们的反射的方法对象,通过这个引Mo,我们能执行这个方法,这个方法就行,这个参数就行了,啊就可以了。那我们在用这个代理的时候呢,它实际上的执行的方式呢,我们大概看一下画个图吧。好,这个是我们的这个应用类啊,应用类。这边放大一点,那这块呢,就是我们刚才。
09:03
我们看到那个叫my shop那个类啊,My shop。也就是我们成语中的这个类啊,就是它。Man上这个嘞。接在里边是干什么呢?我们是创建的目标,创建了invo handler,主要是我们的这个方法。New proxy instance,它是创建对象的,主要是它啊是这块。把这个拿过来。好,那在它这个里边呢,我们是用来。创建代理对象的动态代理对象。代码呢,是这个能把它换个颜色吗?啊。啊。这是我们的这个代码啊,因为它这个再大一点。
10:06
行。三个参数就是这样。往前放一点啊。啊,这是三个参数,能够创建代理,那这里的proxy是代理对象啊,是代理对象它是什么类型的呢?是我们的com点三点procy.Dollar procy这个类型的啊是这个类型的。这是代理对象啊,代理对象他通过我们这个方法new proxy创建出来的,然后通过代理对象执行方法。通过代理这项执行方法调用,能执行and得了,那就说你只想proxy.shell吗?传了一个一,那此时执行的是三的了中的那个眼。
11:21
Inv形是这个,以某个方法形是它。这是我们的man shop,然后中间呢,还有核心的就是我们现在要说的这个叫做。Invocation handle了。好,这个接口的实现类啊,就是它。应用课堂实验类,这个实验类里边有什么呢?它主要的内容是。在这个类中,我们看它会有一个avoid,叫work方法,第一个是代理对象,我们不需要管,我们也不用它,第二个是method,第三个呢是object art,它是一个数组。
12:12
那我们在这里主要干什么呢?我们要干的目的是为了去执行你的代理的功能,代功能我们要做的是有两个,第一个要调用目标方法,第二个要增加功能。这是我们干了两件事情啊,那两件事情,那怎么着调用目标方法呢?第一个调用目标方法,我们使用的是叫做method对象,它的叫Mo,这块是目标对象,然后是阿斯参数,那就完事了。第二个功能增强,功能增强最后return是返回。
13:08
目标方法的执行结果,哎,这引窝变成handle德了,哎,就这么样一个完事的功能了,那当你在执行这个method involve的时候,它实际上执行是谁呢?实际上执行的是啊。也就是说,当你在执行的是这个在这儿。那么这块它指的是谁呢?是USB USB can factory中的方法。你目标对象是这个u factory吗?那现在也就是说你现在的流程就是说当你在听这个shell的时候,在这啊这个shell。但执行它的时候,它执行是这个影幕。就是这个。
14:00
然后代码呢,它会从上往下依次执行,从上往下依次执行这个代码。啊,意思就那个代码。完事了,然后当你走到这个这句话的时候,它执行是这个。等factor,然后再进行功能增强,最后返回你的结果,那这个反应结果返到哪去了呢?这个返回结果呢,它实际上返回的还是这儿,就是这个你调用处。呃,画到这儿吧。啊,这。那你什么时候调用就什么时候返回呗。用你调用的位置,也就是说找shell,它的返回值就是这个结果就是它。就是这个结果啊,就是它。就是它这是我们执行这个动画代理呢,它的这么样一个过程啊,这样一个过程。当然这个过程呢,肯定比你用那个静态代理的要复杂啊要复杂。
15:01
在这里呢,我们这个对象是通过我们的这个方法生成出来的,不用你去拗。你没用啊,不用你去用,是生成出来的,然后这个对象调方法时,它只能是这个。这里边儿是你代理要干的功能,通过ma Mo去间接的调用这个目标方法。对这个返回值可以做增强,可以做其他功能,最后把这个结果呢,再返回给这个调用处的位置,是这样的一个过程啊,这样一个过程。当然这个功能呢,肯定会比我们以前用的什么静态的呀,或者是说没学到之前的那个要复杂的多。当然里边如果你要看里边时间代码的话,会更复杂啊,当然时间代码,那我们现在先不看了。啊,因为这个时间代码实际上是非常复杂的一个功能,你要看的话呢,会导致你呢。看不懂,为什么看不懂?并不是说因为大家这个其他方面的问题,是因为你掌握的知识点少。
16:04
你掌握的知识点少,你现在才学多少东西啊?你怎么可能把这些很深奥的东西掌握呢?是不可能的,因为现在你还没学那么多知识点呢。你现在你想你在学多少知识点呢?没有那么多,你支撑不起来看这个内容,所以说不是大家的问题,是因为你现在学的少。我的代理啊。大家想想是不是这个道理,你现在学的少嘛,所以呢,他讲的知识点呢,你呢就会。因为你没讲过这个知识点,你要说到的话,你肯定就是理解不了嘛,就因为呢,大家的知识点,现在呢,长的呢,他不是。不是那么多,不是那么多,所以呢,你现在看这个呢,它难是这样的,这是没问题,这是正确的,确实嘛,你没讲那么多,你怎么可能把所有东西都看到呢。
我来说两句