动态代理

来源:互联网 发布:coc各级墙升级数据 编辑:程序博客网 时间:2024/06/05 11:41

Subject.java

package dynamicproxy;public interface Subject {    void rent();    void hello(String str);}

RealSubject.java

package dynamicproxy;public class RealSubject implements Subject {    public void rent() {        System.out.println("I want to rent my house");    }    public void hello(String str) {        System.out.println("hello: " + str);    }}

DynamicProxy.java

package dynamicproxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class DynamicProxy implements InvocationHandler {    // 要代理的真实对象    private Object subject;    //    public DynamicProxy(Object subject) {        this.subject = subject;    }    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        // 在代理真实对象前,可以添加自己的一些操作        System.out.println("before " + method.getName());        //        method.invoke(subject, args);        // 在代理真实对象后,可以添加自己的一些操作        System.out.println("after " + method.getName());        return null;    }}

Client.java

package dynamicproxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;public class Client {    public static void main(String[] args) {        // 要代理的真实对象        Subject realSubject = new RealSubject();        InvocationHandler handler = new DynamicProxy(realSubject);        Subject subject = (Subject)Proxy.newProxyInstance(handler.getClass().getClassLoader(),                realSubject.getClass().getInterfaces(),                handler);        System.out.println(subject.getClass().getName());        subject.rent();        subject.hello("world");    }}


原创粉丝点击