【学习心得】动态代理小结

---------------------- android培训java培训、期待与您交流! ----------------------

反射要用到的包是java.lang.reflect.Proxy,从这儿我们不难看出,代理和反射有紧密的联系。代理涉及到四个成分:客户端程序,抽象公共接口,代理对象,目标对象。代理就是,客户端调用某个对象时不是直接调用该对象,而是通过代理对象调用;代理对象封装了对真实对象的调用(访问),同时还增加了一些其他功能(多用于测试软件的稳定性等特性),所以通过代理对象也能达到访问目标对象的效果,同时还能达到其他目的。代理对象不必是事先知道目标对象的,可以在程序运行时动态完成,这样可以保证效率,因为如果所有的代理类(对象)都事先了解目标对象(实现其功能),这样会占用大量的系统资源。动态生成代理类首先声明一组接口,这组接口必须包含和目标对象相同的接口,调用代理类的方法时,代理类会去调用目标类的相同的方法,这样就实现了代理。
    代理类要用到InvocationHandler接口和Proxy类,InvocationHandler接口中仅仅定义了一个方法invoke(Object proxy, Method method, Object[] args) ,在实际开发中参数proxy一般就是代理类,method为代理的目标类的方法,args为这些方法的参数。由于是动态代理,所以了,我们在获得代理方法,产生代理类是经常用到反射,利用反射来获得这些信息,例如张老师讲课时编写的代码Class clazzProxy1 = Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);就是利用反射获得一个代理类的Class对象,同时提供了该对象的类加载器和接口的Class对象(如果为Class型的数组,则该数组元素不能引用同一个Class对象)。然后我们就利用了反射获得了这个代理类的Class对象的各种属性,主要是构造函数和方法,因为我们的目标是创造代理类实现代理方法。Proxy类中定义了四个方法和一个构造方法,我们主要利用Proxy(InvocationHandler h)来产生Proxy的实例对象,这是静态的,参数h,它的主要作用就是关联目标对象的方法(通过其内部方法invoke(Object proxy, Method method, Object[] args)实现)。动态产生代理类主要是newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h)方法,这个方法在生成代理类是很方便的,但是他们的参数一定要我们搞清楚的,interfaces是接口,不再是Method,其他的思想和invoke方法一样——告诉调用对象代理类,代理的方法,代理方法的参数。
    学习过程中,我感觉比较难理解的是动态产生动态代理对象,因为各个参数和调用让人比较混乱,以后还得加强,要彻底吃透这部分。

 ---------------------- android培训java培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值