`

Java动态代理

    博客分类:
  • Java
阅读更多
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class DynamicSubject implements InvocationHandler {
    private Object sub;

    public DynamicSubject(Object obj) {
        sub = obj;
    }

    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        System.out.println("the proxy method is:" + method.getName() + "  "
                + method.getDeclaringClass());
        System.out.println("before");
        method.invoke(sub, args);
        System.out.println("after");
        return null;
    }

    static public void main(String[] args) throws Throwable {

        Object real = new RealSubject();
        InvocationHandler handler = new DynamicSubject(real);
        Object proxyed = Proxy.newProxyInstance(real.getClass()
                .getClassLoader(), real.getClass().getInterfaces(), handler);

        if (proxyed instanceof Subject) {
            Subject subProx = (Subject) proxyed;
            subProx.request();
        } else
            proxyed.toString();
    }
}

interface Subject {
    void request();
}

class RealSubject implements Subject {
    public void request() {
        System.out.println("true");
    }
}

class ProxySubject implements Subject {

    private RealSubject realSubject;

    public ProxySubject(RealSubject real) {
        this.realSubject = real;
    }

    public void request() {
        System.out.println("before");
        realSubject.request();
        System.out.println("after");
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics