00:00
动态代理啊,这个有点麻烦的是,就是我觉得你们不好理解,就是他用到的那些工具类都比较长,而且用的时候也比较用匿名内部实现,这个也不是不好理解啊,就是不好理解,好我们来看JDK动态代理。啊,这个动态代理啊,用到的类和接口。那它它底层是有工具类的啊,它是使用啊现成的工具啊类完成啊JDK动态实现。他是底层有工具类的,就说这些底层干活的类不用你写啊,但你得会掉啊,你得会掉,然后呢,我们先来看第一个啊,我们的这个类叫proxy pro proxy proxy的这个类啊,这个类是干嘛的呢?啊,它是切记啊,它是Java打点long打点re打点的pro prox。
01:07
它是这这个包下的,我们还有其他包也有proxy类,这个一定要搞清楚啊,它是这个包下的类啊,就是类proxy,然后呢,它有一个方法啊,它有一个方法new proxy instance。啊,这个我从这给你调一下。啊,他有这个方法。啊,他有一个方法,就是这个方法里面这个参数,这个参数我们我先给你省略掉,因为参数好难的,我一会得专门去讲啊,他有一个方法专门用来,哎,你就不用不用纠结了,人家这个方法专门用来生成动态代理对象,就这个方法一调,动态代理对象就来了。就这么干。啊,他有这就这个方法来完成这个动态代理对象的这么这么一个创建,那反正你干活就把这个类抓出来,然后调这个方法,拿动态代理对象就这么个事啊,然后呢,这个方法的参数啊,老麻烦了来。
02:17
我把这个。而且还得回避异常都是固定的。那么。看到此方法的参数啊,这个我们点点点,这就是那个pro的那个类的那个new pro这个方法,这个方法你会发现这个class load,你们还知道他是干嘛的吗。这个类是干嘛的?类加载器,就是说你给我的这个目标对象,我得通过类加载器加载到JVM的内存里啊,然后这个类才可以被识别,被调用,被创建,那么我通过类加载器去干这个活,这这个你也不用去多费劲的理解,记住他就是这么干的。
03:12
啊,就是这么干的,然后呢,再来下面这个class class问号,这是泛型啊。泛型的那个类,而且这个问号呢,也是泛型的一种表示,就是任意的类型,但是是数组任意类型的这个数组interface,其实这个就是目标对象实现的所有接口。啊,我为啥要拦截目标对象实现所有接口,因为接口可以多实现,对不对?一个类可以实现多个接口,这个能理解吗?对吧,一个类A接口,逗号B接口,我是可以实现多个接口的,所以我要把你所有接口都拿到。啊,所以这个呢,是目标对象实现的所有接口,Interface接口的数组,目的是拿到接口中的所有方法。
04:08
啊,然后呢,这个。Invocation handler,这个是什么?这个同学们,我我觉得我为了让你好理解,就他就类似于啊,他就类似,但并不是他就类似于a jt,就是我们刚刚说的那个代理类,它就类似于a j jt的功,那么代理啊的功能和目标啊,目标对象的业务功能调用在这。哎,就在这就这个里面就包含了这些内容啊,就它就类似于agent那个功能,你看看agent干嘛了,不就是代理功能的实现,在家调用目标对象功能的实现,代理功能的实现,Agent里面不就这点事。
05:02
能明白吗?而我们最终动态代理里面,我们就得写在invocation handle,非常遗憾的是,它是个接口。哇,这就增加难度了,传参数传了个接口,我一会来教你们怎么搞,你先搞清楚他是干这个事啊,他是干这个事好了,那么这就是这个类,你看底层的这个类,你要用起来好麻烦。就你看起来它很复杂,就比如说我给你个收割机,你抬头一看,我的天呐,这么一个庞然大物。但是你要会操作它啊,你不用管它的原理操作就行啊,好来下一个。然后MY的me o my的这个类,这个类是干嘛的。反射用的类,用来用来进行。目标,呃,目标对象。
06:00
用来呃,进行目标对象的方法的反射调用啊反射调用也就是说我给你一个方法什么,你外边正在调用什么方法,Method的就可以代理那个方法,就可以指代那个方法。它就相当于是方法的一个传参,就这个方法是一个参数,通过method的接住,接住你调的那个show方法,S方法的对象来接那个方法。能明白吗?啊,用来进行目标对象的反射调用,那么也就意味着这个me OD method的这个对象助啊,接住我们正正在调用的方法,那个sing或者是受等等所有的这种方法,那么me的就等同于他们能听懂吧,Me hod method的就等等同于我的thing的方法,或者就等同于这些方法。他就是方法的传参,就是方法本身像个参数一样传给me的。
07:04
啊,还记不记得me的有个非常经典的方法是什么me o me打点。In,这个方法还记不记得?不记得了啊,反射这是调用啊,这个呢相当于是手工,哎这个呢,手工调用目标方法,其实就干了这么一个事啊,这这这个就相当于是在这我们调用这个C或者调用这个show,就就相当于手工在调这个方法。能能懂这意思吗?哎,就这么这么这么个意思,这个呢,你们如果这块稍微迷糊的话,赶快去看崔老师讲的反射那一章,用到这个知识点,然后回去恶补那一章啊,去读那个去,去听那个视频,然后去理解,我现在用到了,你往回倒,你就更好理解,讲的时候你可能不知道用在哪,所以你不理解,现在倒回去去听那个知识点。
08:01
啊,好了,那么这个就完了,还有最后的一个借口。Vocao我可以啊,这个是个接口,哎,这是个接口。那么这个接口我们刚刚有说过呀,它是实现啊代理和业务功能啊,业务功能的,它是用来干这个事啊,那么我们在调用时使用匿名。内部实现。啊,匿名内部类会不会用,有没有写过匿名内部实现的这种功能。没有写过也没关系啊,我来带你们写好,那么这是这三个要用到的两个类和一个接口,先这么着。
我来说两句