小标
2018-08-30
来源 :
阅读 1579
评论 0
摘要:本文主要向大家介绍了JAVA语言之JDK动态代理实现教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。
本文主要向大家介绍了JAVA语言之JDK动态代理实现教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。
什么是动态代理。和现实世界中的代理商类似,假如你是消费者(程序中的调用者),你想买一辆宝马,你不可能直接到宝马汽车的生产车间(程序中的真实对象)去买,而是去宝马4s店(程序中的代理对象)。也就是说我们需要在调用者调用对象之前产生一个代理对象,让代理对象和真实对象建立代理关系,所以代理必须分两个步骤:代理对象和真实对象建立代理关系;实现具体的代理逻辑方法。
下面我们就用JDK实现一个简单的动态代理
JDK动态代理必须借助接口才能实现,所以我们首先建一个接口,如下:
public interface HelloWorld {
public void hello();
}
然后我们建一个Test类实现接口,如下:
public class Test implements HelloWorld {
@Override
public void hello() {
System.out.println("Hello World");
}
}
有了真实对象以后,我们就可以建立代理对象和真实对象的关系了,必须实现InvocationHandler接口,和其中的invoke方法,如下:
public class JdkProxyExample implements InvocationHandler {
// 真实对象
private Object target = null;
/**
* 建立代理对象和真实对象的代理关系,并返回代理对象
*/
public Object bind(Object target) {
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
/**
* 代理方法逻辑
* 参数分别是:代理对象,当前调度方法,当前方法参数
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("在调度真实对象之前的服务");
Object obj = method.invoke(target, args);// 相当于调用hello方法
System.out.println("在调度真实对象之后的服务");
return obj;
}
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号