基于jdk实现动态代理
接口
public interface Rant {
public void rant();
}
真正的实现对象
public class Host implements Rant {
@Override
public void rant() {
System.out.println("真正房东租房");
}
}
核心代理类
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//这个类自动生成代理对象
public class ProxyInvocationHandler implements InvocationHandler {
private Rant rant;
public void setRant(Rant rant) {
this.rant = rant;
}
//生成代理对象
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),rant.getClass().getInterfaces(),this);
}
//处理代理类并返回结果
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("这里编写附加操作");
//动态代理的本质就是使用反射实现
Object result = method.invoke(rant, args);
return result;
}
}
调用方式
public class Client {
public static void main(String[] args) {
//真实角色
Host host = new Host();
//代理角色
ProxyInvocationHandler pih = new ProxyInvocationHandler();
//通过程序来处理角色来处理我们要调用的对象!
pih.setRant(host);
Rant proxy = (Rant) pih.getProxy();
proxy.rant();
}
}