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

Java动态代理

2016-06-28 17:51 465 查看
今天看了一下Java的动态代码,先不说Java设计模式中的动态代理模式,本文就Java中的代理类,简单说一下,帮助理解一下,希望支持!

先看个动态代理的使用例子:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class TestProxy {
public interface Ia {
public void print();
}

public class IaImpl implements Ia {

public void print() {
System.out.println("IaImpl");
}

}

public static void main(String[] args) {
final Object obj = new TestProxy().new IaImpl();

Ia instance = (Ia) Proxy.newProxyInstance(obj.getClass().getClassLoader(), new Class[] { Ia.class },
new InvocationHandler() {

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("invoke被调用");
return method.invoke(obj, null);
}
});
instance.print();// 调用这个方法的时候也调用了invoke方法
System.out.println("instance是哪个类的对象?——" + instance.getClass().getName());
}
}

输出结果:
invoke被调用
IaImpl
instance是哪个类的对象?——com.sun.proxy.$Proxy0


有时间大家会产生疑问 :invoke()方法是 怎么执行的?这里给解释一下(参考《深入理解JVM》中第9章的部分),由最后一个输出语句,我们可知,instance对象是代理类“Proxy”的class文件,反编译会得到:
..................

public final void print() throws{
try{
this.h.invoke(this, m2, null); //调用invoke方法
return;
}catch{
..................
}
}

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