java动态代理学习笔记

 JDK动态代理


通过一番学习,对动态代理有了一些初步的认识,动态代理就是说可以在运行期创建接口的代理实例。通过动态代理来实现AOP编程.


java动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler。

其中InvocationHandler是代理实例的调用处理程序 实现的接口。该接口中只有

Object invoke(Object proxy, Method method, Object[] args)  方法,该方法 在代理实例上处理方法调用并返回结果。

每个代理实例都具有一个关联的调用处理程序。对代理实例调用方法时,将对方法调用进行编码并将其指派到它的调用处理程序的 invoke 方法。

三个参数的意思是:

Object proxy           在其上调用方法的代理实例

Method method     对应于在代理实例上调用的接口方法的Method 实例

Object[] args          包含传入代理实例上方法调用的参数值的对象数组,如果接口方法不使用参数,则为null

返回:

从代理实例的方法调用返回的值。如果接口方法的声明返回类型是基本类型,则此方法返回的值一定是相应基本包装对象类的实例;否则,它一定是可分配到声明返回类型的类型。如果此方法返回的值为null 并且接口方法的返回类型是基本类型,则代理实例上的方法调用将抛出NullPointerException。否则,如果此方法返回的值与上述接口方法的声明返回类型不兼容,则代理实例上的方法调用将抛出ClassCastException

如何创建代理实例呢?

方法一.1,通过Proxy.getProxyClass()方法创建若干接口的Class文件,

             2,通过Class文件可以得到其构造方法

             3,最后通过构造方法实例的newInstance方法得到代理实例

 

方法二.,通过Proxy的newProxyInstance() 方法,直接返回一个带有代理类的指定调用处理程序的代理实例,

              它由指定的类加载器定义,并实现指定的接口             

                      该方法的参数列表是:

                      ClassLoader  loader,    指定一个类加载器用于加载指定的接口

                      Class<?>[] interfaces,   给出需要创建代理实例的接口

                      InvocationHandler h,      给出代理实例的调用处理程序实现的接口

 

 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值