1. 程式人生 > 其它 >萬能動態代理類

萬能動態代理類

ProxyInvocationHandler.java

// 等會我們會有這個類,自動生成代理類
public class ProxyInvocationHandler implements InvocationHandler {
    // 被代理的介面
    private Object target;

    public void setTarget(Object target) {
        this.target = target;
    }

    // 生成得到代理類
    public Object getProxy() {
        return Proxy.newProxyInstance(this.getClass().getClassLoader(),
                target.getClass().getInterfaces(),
                this);
    }

    // 處理代理例項,並返回結果
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        log(method.getName());
        System.out.println(proxy.getClass().getName());
        Object result = method.invoke(target, args);
        return result;
    }

    public void log(String msg) {
        System.out.println("執行了" + msg + "方法");
    }
}

呼叫

public static void main(String[] args) {
    // 真實角色
    UserServiceImpl userService = new UserServiceImpl();
    // 代理角色,不存在
    ProxyInvocationHandler pih = new ProxyInvocationHandler();
    pih.setTarget(userService);//設定要代理的物件
    //動態生成代理類
    UserService proxy = (UserService) pih.getProxy();

    proxy.delete();
}