标签:mic class ima this 优点 author use his pre
2、动态代理
JDK实现动态代理需要两个类:
代码
动态代理:可以代理任何类
优点:我们不需要像静态代理一个类型的类必须跟一个代理,这里可以说是一个工具类,每一个类都可以拿来用,
底层利用反射的机制实现,而且静态代理必须和实例实现同一个接口,而有些方法代理并不需要实现,增加了代码冗余。
package bing.demo3;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* @author zhangbingbing
* @version 1.0
* @date 2020/5/23 19:01
*/
public class ProxyInvocationHandler implements InvocationHandler {
private Object target;
public void setTarget(Object target) {
this.target = target;
}
public Object getProxy() {
//关键:我们在这里返回被代理对象的实例
return Proxy.newProxyInstance(this.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
//显然invoke就是用来执行方法的
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//用反射来实现
Object invoke = method.invoke(target, args);
return invoke;
}
}
public class Client {
public static void main(String[] args) {
//都需要一个代理的实例对象
Host host = new Host("小张");
ProxyInvocationHandler phl = new ProxyInvocationHandler();
phl.setTarget(host);//设置这个实例对象
Rent proxy = (Rent) phl.getProxy(); //返回代理类
proxy.rentHouse(); //执行代理方法
}
}
标签:mic class ima this 优点 author use his pre
原文地址:https://www.cnblogs.com/bingstudy/p/12986558.html