动态代理:程序运行时创建的代理方式被成为动态代理。
实现动态代理需要实现InvocationHandler接口,其中中有一个invoke方法,代理对象的每个执行方法都会替换执行Invocation中的invoke方法
动态代理工具类:
第一步,创建需要代理的对象
private Object target;
public void setTarget(Object target) {
target = target;
}
第二步,设置代理,得到代理对象
public Object getProxy() {
return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
第三步,处理代理函数
//处理代理实例,并返回结果
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object invoke = method.invoke(target, args);
return invoke;
}
public class ProxyInvocationHandler implements InvocationHandler {
private Object target;
public void setTarget(Object target) {
target = target;
}
public Object getProxy() {
return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
/**
* proxy:代表动态代理对象
* method:代表正在执行的方法
* args:代表调用目标方法时传入的实参
*/
//处理代理实例,并返回结果
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object invoke = method.invoke(target, args);
return invoke;
}
}