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

jdk动态代理

2014-04-05 20:53 267 查看
看了很多的jdk动态代理文章,都离不开这几个字:接口动态代理。

按照最简单的方式来看,就是在调用一个对象方法前后加一些处理代码,然后我们就很简单的想到编写一个代理类,传入需要代理的对象通过调用代理类的代理方法来实现“前后加一些处理代码”:

public class GoalClass{

public void goalClassMethod(){}

}

public class Proxy{

private GoalClass goalClass;

public GoalClass setGoalClass(GoalClass gc){

this.goalClass=gc;

}

public void proxyGoalClassMethod(){

//方法调用前的处理代码;

..........

//调用方法;

goalClass.goalClassMethod();

//方法调用后的处理代码;

...........

}

}

但是有个问题:不能给每个类都写一个代理类吧。

所以接口代理这个概念就抛出来了,通过实现对接口的代理,那么,所有这个接口的子类也就被代理了;?(这句话。。。。)

通过实现java.lang.reflect.InvocationHandler这个接口的invoke()方法,实现对方法的代理。

但是又一个问题蹦出来了:jvm怎么能识别不同的子类呢?

是通过java.lang.reflect.Proxy来实现的

通过java的ClassLoader来动态加载不同的子类,我们都知道java是解释型语言,所以在编译期间动态分辨出是哪个具体的子类。

具体是通过java.lang.reflect.Proxy.newProxyInstance(load,cl,hadle)来动态生成一个对象的代理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: