一个简单的proxy代理实现 一个非常普通的接口 /** * 类HelloWorld.java的实现描述: * @author xuyunqin 2009-8-5 下午02:30:23 */ public interface HelloWorld { public void print(); public void say(); } 该接口的实现 public class HelloWorldImp implements HelloWorld { public void print() { System.out.println("Hello world for Proxy"); } public void say() { System.out.println("say love"); } } 该接口的代理类,这是一个静态的代理类 public class HelloWorldProxy { private HelloWorld helloworld; public HelloWorldProxy() {} public HelloWorldProxy(HelloWorld helloworld) { this.helloworld = helloworld; } public void print() { this.helloworld.print(); } } 下面是动态的代理类 /** * 类DynamicProxy.java的实现描述: * 动态代理类只能代理接口,代理类都需要实现InvocationHandler类,实现invoke方法。 * 该invoke方法就是调用被代理接口的所有方法时需要调用的,该invoke方法返回的值是被代理接口的一个实现类 * * @author xuyunqin 2009-8-5 下午02:55:07 */ public class DynamicProxy implements InvocationHandler { private Object object; public DynamicProxy(Object object) { this.object = object; } //绑定关系,也就是关联到哪个接口(与具体的实现类绑定)的哪些方法将被调用时,执行invoke方法。 //Proxy.newProxyInstance的第三个参数是表明这些被拦截的方法执行时需要执行哪个InvocationHandler的invoke方法 public Object bindRelation() { return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("Welcome "); Object result = method.invoke(object, args); return null; } } 测试代码: public class HelloWorldApp { /** * @param args */ public static void main(String[] args) { //静态代理 HelloWorldProxy hello = new HelloWorldProxy(new HelloWorldImp()); hello.print(); //动态代理 HelloWorld helloWorld = new HelloWorldImp(); DynamicProxy proxy = new DynamicProxy(helloWorld); HelloWorld helloWorld1 = (HelloWorld)proxy.bindRelation(); helloWorld1.print(); helloWorld1.say(); } }