看一个动态代理的例子
接口:
public interface Hello {
void sayHello(String name);
}
实现:
public class HelloServiceImpl implements Hello {
@Override
public void sayHello(String name) {
System.out.println(" hello :" + name);
}
}
代理类:
public class DynamicProxy implements InvocationHandler {
private Object target;
public DynamicProxy(Object target) {
this.target = target;
}
public <T> T getProxy() {
return (T) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return method.invoke(target.getClass().newInstance(), args);
}
}
调用:
public class ProxyDemo {
public static void main(String[] args) {
Hello hello = new DynamicProxy(new HelloServiceImpl()).getProxy();
hello.sayHello("peanut");
}
}
具体的代码实现主要是 Proxy.newProxyInstance方法,该方法传递三个参数
ClassLoader loader
加载这个代理类的类加载器。Class<?>[] interfaces
要实现代理的代理对象接口数组InvocationHandler h
动态代理调用的方法