动态代理

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:方法的实现细节

posted @ 2022-12-15 09:26  xiaoovo  阅读(36)  评论(0)    收藏  举报