您的位置:首页 > 编程语言 > Java开发

jdk动态代理示例以及代码原理分析

2016-12-09 14:49 351 查看
相信很多人在刚刚学习Java时,会感觉【动态代理】晦涩难懂,只知道如何来调用它,却不知道它的实现细节。本文通过根据JDK源码,展示这些细节,以期能对JDK的动态代理有深入的理解。

简单示例代码

public class ProxyInstance implements Product {

public void show() {
System.out.println("这是原本的类");
}

}

public class JdkProxyTest {

public static void main(String[] args) {
final ProxyInstance target = new ProxyInstance();
Product proxy = (Product)Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("代理的前置方法");
Object object = method.invoke(target, args);
System.out.println("代理的后置方法");
return object;
}
});
proxy.show();
}

}


执行后的打印代码如下:

代理的前置方法
这是原本的类
代理的后置方法


基于JDK的动态代理最终都是调用了上面类型的代码来实现。有时候感觉动态代理难以理解,是因为示例代码中有几个地方隐藏了实现细节,让人无法完全明白这个过程到底发生了什么。需要搞清楚的有以下2点:

①既然说到代理,那么这个代理是何时、如何创建的?
②上面注入的InvocationHandler里的invoke方法由谁来调用执行?


代码分析

我们从
Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
开始分析。

待补充
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jdk java