[JVM] study notes dynamic proxies

Dynamic agent JDK following examples

Interface Subject 

public interface Subject {
    public abstract void request();
}

 

Implementation class RealSubject

public class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("from realsubjct");
    }
}

 

Acting Class

public class DynamicSubject implements InvocationHandler {

    private Object sub;

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

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("before calling: " + method);
        method.invoke(this.sub, args);
        System.out.println("after calling: "+method);
        return null;
    }
}

 

Client class

public class Client {
    public static void main(String[] args) {
        RealSubject rs = new RealSubject();
        InvocationHandler handler = new DynamicSubject(rs);
        Class<?> cls = rs.getClass();

        Subject subject = (Subject) Proxy.
                newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), handler);
        subject.request();
    }
}

 

Results of the

before calling: public abstract void com.learn.jvm.Subject.request()
from realsubjct
after calling: public abstract void com.learn.jvm.Subject.request()

 

Guess you like

Origin www.cnblogs.com/heben/p/11478846.html