jdk动态代理

看了很多的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)来动态生成一个对象的代理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值