首页 / JAVA / Java学习之动态代理篇
Java学习之动态代理篇
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java学习之动态代理篇,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2110字,纯文字阅读大概需要4分钟。
内容图文
Java学习之动态代理篇
0x00 前言
在后面的漏洞研究的学习中,必须要会的几个知识点。反射机制和动态代理机制。至于反射的前面已经讲到过了,这里就不做更多的赘述了。
0x01 动态代理
这里先来讲一些动态代理的一个定义。
动态代理是给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。
([手动滑稽]其实动态代理就是一个中间商,间接的把东西送到客户手里,但是在此之前肯定要赚点差价)
我们开发
中使用动态代理的主要目的是在不改变目标对象方法的情况下对方法进行增强
。
这里再普及几个概念:
1. 真实对象:被代理的对象
2. 代理对象:
3. 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的
我们来写一段正常情况下使用真实对象调用方法的一段代码。
computer接口代码:
package com.test.web.proxy;
public interface computer {
public String method(double money);
String show();
}
lenveo类代码:
package com.test.web.proxy;
public class lenveo implements computer{
@Override
public String method(double money) {
System.out.println("花了+"+money+"买的电脑");
return "电脑";
}
@Override
public String show() {
System.out.println("展示电脑");
return "展示电脑";
}
}
test类代码:
package com.test.web.proxy;
public class test1 {
public static void main(String[] args) {
lenveo lenveo = new lenveo();
String method = lenveo.method(8000);
String show = lenveo.show();
System.out.println(show);
System.out.println(method);
}
}
这是一段正常的代码,如果我们需要在不改动其他类代码的情况下对他进行增强,那么就可以使用到动态代理。
下面来看看动态代理的实现步骤,来根据步骤实现动态代理。
package com.test.web.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class test {
public static void main(String[] args) {
lenveo lenveo = new lenveo();
//获取传入类加载器 //获取传入真实对象所有接口
computer proxy = (computer) Proxy.newProxyInstance(lenveo.getClass().getClassLoader(), lenveo.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("invoke方法执行了");
Object obj = method.invoke(lenveo, args);
return obj;
}
});
String method = proxy.method(3000);
System.out.println(method);
}
}
这里的Proxy.newProxyInstance方法传入了三个参数分别是:
1.类的加载器:new出来的真实对象.getClass().getClassLoader()
2.接口数组:new出来的真实对象.getClass().getInterfaces()
3.处理器:new InvocationHandler()
使用动态代理,代理对象调用任意方法,代理的invoke方法都会执行。
invoke参数:
1.proxy:代理对象
2.method:代理对象调用的方法,被封装成的对象
3.args:代理对象调用方法适合传递的实际参数
0x02 结尾
好了,又一篇文章水完,动态代理机制还是比较重要了的。这里也只是一些简单的动态代理内容,后面有空了再更新一下动态代理。
原文:https://www.cnblogs.com/nice0e3/p/13562660.html
内容总结
以上是互联网集市为您收集整理的Java学习之动态代理篇全部内容,希望文章能够帮你解决Java学习之动态代理篇所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。