java动态代理的使用,不在使用真实的对象调用方法,而是使用代理
定义一个sell接口
public interface Sell {
void sell();
void add();
}
实现这个接口
public class Vendor implements Sell{
@Override
public void sell() {
System.out.println("sell method");
}
@Override
public void add() {
System.out.println("add method");
}
}
public class DynamicProxy implements InvocationHandler {
private Object obj;
public DynamicProxy(Object obj){
this.obj = obj;
}
//proxy代表当前代理对象,method代表调用的方法,args代表参数
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before");
Object result = method.invoke(obj, args);
System.out.println("after");
return result;
}
}
public class Main {
public static void main(String[] args) {
DynamicProxy inter = new DynamicProxy(new Vendor());
Sell sell = (Sell) (Proxy.newProxyInstance(Sell.class.getClassLoader(),new Class[]{Sell.class},inter));
sell.sell();
sell.add();
}
}
创建动态代理需要用到Proxy类的public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces, InvocationHandler h)方法。
参数1:类加载器,一般是需要代理的类的类加载器
参数2:一个接口的数组
参数3:方法的实现细节