Java中的JDK动态代理
实现步骤#
1代理对象和真实对象实现相同接口#
先创建一个接口 并创建一个类实现接口中的方法
创建接口Salecomputer
public interface Salecomputer {
abstract public String sale(double money);
abstract public void show ();
}
创捷实现类 实现接口
public class lenvo implements Salecomputer{
@Override
public String sale(double money) {
System.out.println("花了"+money);
return "买电脑";
}
@Override
public void show() {
System.out.println("买了电脑");
}
}
创建测试类
package proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class proxyText {
public static void main(String[] args) {
//创建真实对象
lenvo lenvo = new lenvo();
//动态代理增强 lenvo 对象
// Proxy.newProxyInstance();创建一个代理实例
//第二个参数为被代理对象(真实对象)的接口 //第三个参数为 实现InvocationHandle的匿名内部类(zai)
//Proxy.newProxyInstance() 返回一个Object 类型的代理对象 我们可以把它转为接口类型
Salecomputer proxy_lenvo = (Salecomputer) Proxy.newProxyInstance(lenvo.getClass().getClassLoader(), lenvo.getClass().getInterfaces(),
new InvocationHandler() {
//invoke 方法:代理逻辑编写的方法,代理对象调用的所有方法都会执行该方=
//参数 1 proxy -代理对象
// 2 method 代理对象调用的方法封装为的对象
// 3 args 代理对象调用方法时传递的实际参数数组[]
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//1增强参数 (需要参数的方法才需要增强)在该结口中只有 sale 需要参数
if(method.getName().equals("sale")){
//业务逻辑
double money = (double) args[0];
money = money *0.85;
//使用真实对象调用方法
Object obj = method.invoke(lenvo, money);
// 增强返回值
return obj + "送了一个鼠标";
}else {
Object obj = method.invoke(lenvo, args);
return obj;
}
}
}
);
//使用代理对象 调用被代理对象的方法
String computer = proxy_lenvo.sale(8888);
System.out.println(computer);
}
}
作者:冰莫莫
出处:https://www.cnblogs.com/icemomo/p/15994272.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
转载请注明出处
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了