看了两遍视频,终于搞明白了代理是个啥玩意。
第一遍看完之后还云里雾里的,但是弄懂了之后也不是很难。
代理,顾名思义,就是找个人来帮你干活,比方说你要盖房子,你找了个施工队来帮你盖,那么盖房子之前施工队可能会做个施工计划,弄个预算什么的,然后盖房子还照着你的要求进行,改完房子之后,施工队则要结算,盖房子花了多久,用了啥材料,要多少钱的样子。其实这盖房子前后就是代理里边的系统代码(比方说记录时间、消耗的材料等),盖房子进行中每到一个阶段都要征求你的意见,就相当于代理里边的类的方法每次执行时都要找到被代理对象(你)的方法来执行。
所以代理对象的创建只需要一个参数,而且代理类内部只有这一个变量,就是一个实现了IvocationHandler的实例对象,这个对象只有一个invoke方法,我们所有的操作都在invoke方法里边进行,比如在调用被代理对象的方法之前干点什么(比方说给大家问个好?),然后调用被代理对象的方法,这个方法返回的值就是咱代理类的InvocationHandler的invoke方法的返回值,然后调用方法后干点什么(比如说跟大家说再见)。所以用代理类调用被代理类的方法的实际原理就是:
调用方法时,代理类会调用自己唯一的一个实现了InvocationHandler的成员变量的invoke方法,invoke方法所需要的三个参数分别是:代理类的实例对象(用来判断第二个参数 method 到底是谁的) 、Method(将要调用的方法)、将要调用的方法的参数对象。当给代理对象指定了被代理目标时,invoke方法里边就可以直接调用Method.invoke(目标, 方法参数)了,如果目标还是个代理类的话,则这个代理类又会去找自己的InvocationHandler去干前面的事了,就成了死循环。Method.invoke(目标, 方法参数)前后就可以人为的干点什么好事或者坏事了。
代理基本就是这个原理,根据这个原理,将步骤封装,就形成了老师讲的迷你型的Spring框架了。
框架怎么写,看视频就好了,这里我把我写的都贴出来吧,其实跟老师的一模一样,但是是我自己在隔天不看视频的情况下敲出来的,因为网上下载的视频中没有源代码。
在这里还是要梳理一下理解代理的步骤(也是视频中老师的讲解步骤, 到第四步理解了就没问题了):
1、先获得动态代理类的构造方法和方法列表
2、创建代理类的实例对象(三种方法)
3、通过代理类的实例对象来调用被代理类的方法
4、理解InvocationHandler是个什么东西,并重写invoke方法
5、封装步骤,实现一个小的AOP框架。
代码(没有源代码的可以参考我写的,至于):
|
-
-
src.rar
2.84 KB, 下载次数: 4
没有源代码的可以参考这个,有不对的地方希望大家指出
|