首先定义一个接口
package cn.wm;
public interface Subject { public void rent(); public void hello(String str);}实现类
package cn.wm;
public class RealSubject implements Subject {
@Override
public void rent() {
System.out.println("I want to rent my house");
}
@Override
public void hello(String str) {
System.out.println("hello:"+str);
}
}
代理类(需要实现InvocationHandler接口)
package cn.wm;
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;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before rent house");
System.out.println("method" + method);
method.invoke(subject,args);
System.out.println("after rent house");
return null;
}
}
测试类
package cn.wm;
import java.lang.reflect.Proxy;
public class Client {
public static void main(String[] args) {
RealSubject realsubject = new RealSubject();
DynamicProxy dynamicProxy = new DynamicProxy(realsubject);
Subject subject = (Subject) Proxy.newProxyInstance(dynamicProxy.getClass().getClassLoader(),
realsubject.getClass().getInterfaces(),
dynamicProxy);
System.out.println(subject.getClass().getName());
subject.rent();
subject.hello("Hello Word");
}
}
打印结果
com.sun.proxy.$Proxy0 //说明为代理对象
before rent house
methodpublic abstract void cn.wm.Subject.rent() //调用的为接口的方法
I want to rent my house
after rent house
before rent house
methodpublic abstract void cn.wm.Subject.hello(java.lang.String) //调用的为接口的方法
hello:Hello Word
after rent house
参考 点击打开链接