众所周知,静态代理模式就是通过代理类和目标类实现相同的接口,代理类持有目标类的对象,然后在代理类实现的方法中通过在调用目标类的方法前后执行增强代码来实现。而JDK动态代理并没有手动创建代理类,原理是JVM在运行时动态创建了代理类,先上代码:
// 接口
public interface SayInterface {
void sayHello(String name);
void sayBye(String name);
}
// 实现
public class SayInterfaceImpl implements SayInterface {
public SayInterfaceImpl() {
}
@Override
public void sayHello(String name) {
System.out.println(name);
}
@Override
public void sayBye(String name) {
System.out.println(name);
}
}
那么接下来如何生成代理对象呢,有请Proxy登场
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)throw IllegalArgumentException
这个方法负责生成代理对象,接受三个参数,类加载器ClassLoader,接口的Class数组以及一个InvocationHandler的实现类,对于InvocationHandler接口
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable;
InvocationHandler接口很简单,只接受三个参数,代理对象,目标接口的Method, 以及接口的入参,代理类的增强方法都要交给这个接口的实现类来处理,接下来写InvocationHandler的实现