jdk-动态代理
动态代理-jdk
基于JDK的动态代理要求被代理类必须实现一个公共接口
1、公共接口
public interface Subject {
void hello(String param);
}
2、被代理类
public class SubjectImpl implements Subject {
public void hello(String param) {
System.out.println("hello " + param);
}
}
3、代理类
public class SubjectProxy implements InvocationHandler {
//持有一个被代理类的实例, 类型为公共接口类型
private Subject subject;
public SubjectProxy(Subject subject){
this.subject = subject;
}
//代理逻辑
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//目标方法执行前
System.out.println("-----begin-----");
Object invoke = method.invoke(subject, args);
//目标方法执行后
System.out.println("-----end-----");
return invoke;
}
}
4、执行代理
//创建被代理类实例
Subject subject = new SubjectImpl();
//创建代理增强实例
SubjectProxy subjectProxy = new SubjectProxy(subject);
//生成真正的代理对象
/*Proxy.newProxyInstance 方法的参数为
1、被代理类的类加载器
2、被代理类实现的接口数组
3、创建的代理增强实例
*/
Subject proxyInstance = (Subject)Proxy.newProxyInstance(subject.getClass().getClassLoader(), subject.getClass().getInterfaces(), subjectProxy);
//执行代理对象的方法,则会自动执行增强逻辑
proxyInstance.hello("Timi");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现