首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java 动态署理原理(Proxy,InvocationHandler),含$Proxy0源码

2012-10-17 
java 动态代理原理(Proxy,InvocationHandler),含$Proxy0源码今天没事,把以前的知识回顾一下,网上找了找,发

java 动态代理原理(Proxy,InvocationHandler),含$Proxy0源码
今天没事,把以前的知识回顾一下,网上找了找,发现有一篇比较适合。
概述:其实JDK的动态代理,实际上就是“反射”与“执行时动态生成字节码”二者的结合体;就spring的AOP而言也是用的JDK的动态代理(当然也有cglib方式)。
以下来自网络上的博客:

一.相关类及其方法:
java.lang.reflect.Proxy,
Proxy 提供用于创建动态代理类和实例的静态方法.
newProxyInstance()
返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序
(详见api文档)

java.lang.reflect.InvocationHandler,
InvocationHandler 是代理实例的调用处理程序 实现的接口。
invoke()
在代理实例上处理方法调用并返回结果。在与方法关联的代理实例上调用方法时,将在调用处理程序上调用此方法。
(详见api文档)
二.源代码:
被代理对象的接口及实现类:

    public final void modify() {    try {     super.h.invoke(this, m3, null); //该段则执行了InvocationHandler.invoke();  super.h既是InvocationHandler    return;    } catch (Error e) {    } catch (Throwable throwable) {     throw new UndeclaredThrowableException(throwable);    } }  

这样动态代理机制就实现了。
所以JAVA的动态代理的关键就在Proxy.newProxyInstance(..)方法执行时生成了$Proxy0的内存字节码以及JDK的反射机制!

热点排行