代理模式——JDK动态代理
程序员文章站
2022-06-09 21:39:57
...
JDK代理模式是必须有接口的操作,如果没有对应的接口,这个时候JDK代理就没有办法使用
接口
package com.zxw.jdk;
public interface Show {
public void show();
}
被代理类
package com.zxw.jdk;
public class Star implements Show{
@Override
public void show() {
System.out.println("明星表演");
}
}
动态代理
package com.zxw.jdk;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MethodInv implements InvocationHandler {
Show s;
public void setS(Show s) {
this.s = s;
}
public Object getProxy(){
return Proxy.newProxyInstance(MethodInv.class.getClassLoader(),new Class[]{Show.class},this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
/**
* proxy:代理对象
* method:调用方法
* args:参数 null
* */
Object invoke = method.invoke(s, args);
return invoke;
}
}
测试类
package com.zxw.jdk;
public class Test {
public static void main(String[] args) {
MethodInv m=new MethodInv();
//设置被代理对象
m.setS(new Star());
//动态产生代理对象
Show proxy = (Show) m.getProxy();
proxy.show();
}
}
上一篇: 前端面试查漏补缺--(一) 防抖和节流
下一篇: 动态代理