00:00
好,整个的这门课程呢,我们就讲完了,就这么多啊,那么在这门课程中我们学到了什么样的知识点,然后我们来梳理一下啊,红色的呢,是你必须都记住的啊,红色的就是重点,重中之重,你必须要记得,那么其他的了解就行,首先来告诉我什么是代理模式。什么是代理模式?无法访问目标对象,必须通过代理对象进行访问,这就是代理模式,就是那个你眼睁睁看的那个目标对象就无法访问,你也知道是谁,但是你无法访问。就比如说那个服装生产厂啊,就比如说那个房东啊,就比如说那个中国移动或者电信或者联通,你需要人家发短信的这个功能,眼睁睁知道,但你访问不了,人家不搭理你啊,所以这一种呢,就都是代理模式起作用的地方啊,那么代理模式的功能增强访问和限制目标对象访问,我们现在只看到了增强功能。限制目标对象的访问,我们后面会讲啊,先了解就行好,整个的代理模式分类分两类,一类叫静态代理,一类叫动态代理啊静态代理,静态代理是怎么个意思,还记不记得?
01:13
目标对象和代理对象实现同一个业务接口,这是重点。然后呢,代理对象实现功能是必须依靠目标对象自己的实现,也就是说代理对象内部是要调用目标对象亲自实现自己的功能,代理只是额外的功能,不能代替目标对象。啊,那么当业务发生变化时,要进行大量代码的改动。也就是说,当业务又增加了一个方法,这时候天下大变,对吧?所有的目标对象变,所有的代理对象变,烦死了。不要这样啊,所以这是它的弊端啊,而且代理的类是以点招的文件形式存在,运行前就存在。好,今天代理的实现,我们在这做了这么一个实验,了解就行。
02:03
那么之后我们讲了动态代理,动态代理分两大类,一类是JDK动态代理,一类是这个蓝色的,这个其实你就会发现他应该就不是重点了啊cg lab的动态代理,那么什么叫JDK的动态代理?什么叫JDK的动态代理?它的特点是什么?首先第一点,砍掉了一半的这个关联的江山,一半江山割舍掉。就一半砍掉代理对象,不需要再实现业务接口,这边就灵活了呀,就不会天下大变了,而是天下一半在变,另一半不用变。哦,这就是动态代理的这么一个好处,JDK动态代理的好处还有代理对象在运行时内存中去构建。用心手把它取出来用就行,那么目标对象必须实现接口才可以JDK动态代理,目标对象没有实现接口,只能是什么代理?
03:01
目标对象没有实现接口,只能是什么代理。Cg lab此类代理啊,只能是他俩相辅相成的嘛,这样就全套了呀,实现接口不实现接口都能搞得定,都能代理功能啊。那么。接个动态代理,这个说的不准确,叫三个类不对,两个类和一个接口,用来负责生成代理对象,用来回调目标方法evocation handle,用来增强功能。就这三个类啊,是一个接口两个类,就这么点事,你把它记住,这个pro生成对象的时候好烦啊,东西比较多,没关系,你就记住就行。Class load用来加载目标对象的,然后是得到所有的接口handle了,然后匿名内部实现进行功能增强。就干这个事啊,就干这个事好。那么当我们在干活的时候,然后你看这这这业务打点get,这就是那个他盖,我之前那个叫业务啊,其实就是那个target盖。
04:09
Get class的打点get class get class的get interface,这个都有现成的工具去调,就是单词有点长,你给我记住就行啊,这个我hand德这个其实都跟他这个。这个参数有关,你看到这个参数大约知道他在干嘛就完了,然后呢,Handle里面,然后重写in work这个方法,这个方法棒棒的,是因为他给你传了MY的,这就是目标方法。啊,这是目标方法的参数,目标方法这method可以是可以瘦,可以是it等等。然后我把这个方法传给你以后来增强。这些地方是完成增强功能。哎,然后这个地方是来进行什么呀,目标方法的调用,哎,目标方法的调用,这就手工调啊,就相当于是手工啪把这目标方法调用一下,执行它的功能。
05:05
就这么着啊。好了,那么这是我们CJDK的动态代理,Cg lab的动态代理是怎么个是怎么个意思啊?子类动态的构建子类在内存中去重写父类中的被调用的方法。重写后你看到的就是重写后的内容,就这么着啊,他的特点,因为我的JDK必须要实现业务接口,如果你的这个目标类没有实现业务接口,那就cg lab来代理他,我生成一个子类,在子类中去扩展它的功能,这么干。还有特点是代理的类可不可以是的。不可以,他final是断子绝孙类搞不了的,他没有此类怎么代理代不了啊,而且被代理的方法也不能是final,还不能是static 1static没有静态,2FINAL不能被重写,那就吹了呗,就没法下手啊,这就这么着,然后呢?
06:05
他的这真正的cg lab的实现是由自己码处理框架asm来完成的,这个不要我们去掌握了啊,我们了解就行,之后呢,我给你们灌输了一个概念叫面向接口编程,面向接口编程记住四个点。那四个点还记不记得?面向接口编程的四个点一类中的成员变量必须给我记住,同学们。必须记住啊,你不能讲完就忘啊。讲完一点也接不住,哎,那不行,看到我现在的这个代理类中,类中的成员变量设计为接口,这设计接口是不是来superstar superstar周什么superstar随便谁来,我是不是都能代理他。这就是成员变量设计为接口的好处,来方法的参数设计为接口,那么你的构造方法是不是什么都能传进来?
07:03
什么对象来都能传进来,只要实现了这个接口,我就可以处理它啊,这方法的参数设计为接口,当然还有方法的返回值设计为接口,没有用的没有讲,但是我的静态代理、动态代理里面我都用到了面向接口编程的三大特性。一大特性成员变量二大特性参数三大特性。接口指向实现。呃,接口指向实现类,因为这个传进来的就是实现类,其实我调用的是接口指向实现类的功能,哎,这个就是我们整个动态代理里面的内容。
我来说两句