首页 / JAVA / java动态代理学习
java动态代理学习
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java动态代理学习,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2272字,纯文字阅读大概需要4分钟。
内容图文
先理解代理和目标的概念:
举例来说:
金士顿厂家生产U盘但是不直接卖给用户,是经过代理商来卖的
代理商可以是淘宝,可以是京东,可以是拼多多
那么此时,淘宝,京东,拼多多就是代理,金士顿厂商就是目标,
先看静态代理:
静态代理的步骤:
1,定义一个接口,接口里面定义了目标厂家和代理商要实现的功能
比如这里的目标厂商金士顿和代理商淘宝都要实现卖U盘的功能
public interface usbsell {
void sell();
}
2,目标类实现接口
public class kingstonFactory implements usbsell {
@Override
public void sell() {
System.out.println("目标类:工厂卖U盘 85元一个");
}
}
3.代理类包含目标对象,并利用目标对象 调用目标对象的方法,并且可增强功能
public class taobao implements usbsell{
//代理类要想调用目标类的方法 就要包含目标对象
kingstonFactory kf=new kingstonFactory();
public void sell() {
//利用目标对象 调用目标对象里面的方法
kf.sell();
//增强实现
System.out.println("增强实现,淘宝给买U盘的用户送一个小礼品");
}
}
4测试
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
taobao tb=new taobao();
tb.sell();
}
}
输出结果:
静态代理的优缺点:
优点:简单
缺点:
如果目标工厂有多个,那么就要创建多个代理类
比如除了金士顿,还有三星,闪迪卖U盘,那么就要创建多个代理对象
代码的重用性不强
动态代理
动态代理的步骤:
1定义一个公共接口,接口中定义了目标类和代理类都要实现的方法;比如代理商和工厂都要实现卖U盘接口
public interface factorySell {
void sell();
}
2 目标类实现这个接口,
public class kingstonFactory implements factorySell{
@Override
public void sell() {
System.out.println("目标方法:金士顿原厂卖U盘85元一个");
}
}
3 定义一个 myhandler 实现 InvocationHandler接口,
接口里面有一个invoke方法,在这个方法里面通过反射调用目标类中的方法,并且可以增强实现。
public class myhandler implements InvocationHandler{
//用构造方法接收传入的目标对象
Object target=null;
myhandler(Object target){
this.target=target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//通过反射调用目标对象的方法
method.invoke(target, args);
//增强实现
System.out.println("代理类对原厂方法进行了增强,一个U盘100元");
return null;
}
}
4调用Proxy中的静态方法 newProxyInstance来实现动态代理
Proxy.newProxyInstance(ClassLoader loader, //目标类对应的类加载器
Class<?>[] interfaces, //目标类对应的接口,这里指的就是卖U盘的接口
InvocationHandler h // 实现了InvocationHandler接口的那个类的对象
)
内容总结
以上是互联网集市为您收集整理的java动态代理学习全部内容,希望文章能够帮你解决java动态代理学习所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。