什么代理
代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。
代理原理
JDK 动态代理
public interface ICreateLoan2 {
void create();
}
public class GuaranteeCreateLoan implements ICreateLoan2 {
@Override
public void create() {
System.out.println("创建担保类");
}
}
public class CreateLoanProxy implements InvocationHandler {
Object object;
public CreateLoanProxy(Object o) {
this.object = o;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before");
Object invoke = method.invoke(object, args);
System.out.println("after");
return invoke;
}
public Object getProxy() {
return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
}
public static void main(String[] args) {
GuaranteeCreateLoan guaranteeCreateLoan = new GuaranteeCreateLoan();
CreateLoanProxy createLoanProxy = new CreateLoanProxy(guaranteeCreateLoan);
ICreateLoan2 iCreateLoan2 = (ICreateLoan2) createLoanProxy.getProxy();
iCreateLoan2.create();
}
}
动态代理步骤:
- 创建一个实现接口InvocationHandler的类,它必须实现invoke方法
- 创建被代理的类以及接口
- 通过Proxy的静态方法
newProxyInstance(ClassLoaderloader, Class[] interfaces, InvocationHandler h)创建一个代理 - 通过代理调用方法
Proxy.newProxyInstance创建的代理类,已经实现了ICreateLoan2接口。