package com.henry.service; public interface HelloService { void sayHello(); int sum(int i ,int j); }
package com.henry.service.impl; import com.henry.service.HelloService; public class HelloServiceImpl implements HelloService { public void sayHello() { System.out.println("hello henry"); } public int sum(int i, int j) { // TODO Auto-generated method stub return i+j; } }
package com.henry.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class MyProxy implements InvocationHandler { private Object originalObj; public Object bind(Object originalObj){ this.originalObj=originalObj; return Proxy.newProxyInstance(this.originalObj.getClass().getClassLoader(), this.originalObj.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("proxy class exec"); return method.invoke(this.originalObj, args); } }
package com.henry.proxy; import com.henry.service.HelloService; import com.henry.service.impl.HelloServiceImpl; public class TestProxy { public static void main(String[] args) { HelloService service = (HelloService) new MyProxy().bind(new HelloServiceImpl()); service.sayHello(); } }
proxy class exec hello henry
package com.henry.proxy; import com.henry.service.HelloService; import com.henry.service.impl.HelloServiceImpl; public class TestProxy { public static void main(String[] args) { //生成代理类$Proxy0.class System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true"); HelloService service = (HelloService) new MyProxy().bind(new HelloServiceImpl()); service.sayHello(); } }
import com.henry.service.HelloService; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.lang.reflect.UndeclaredThrowableException; public final class $Proxy0 extends Proxy implements HelloService { private static Method m3; private static Method m1; private static Method m0; private static Method m4; private static Method m2; public $Proxy0(InvocationHandler paramInvocationHandler) throws { super(paramInvocationHandler); } public final void sayHello() throws { try { this.h.invoke(this, m3, null); return; } catch (Error|RuntimeException localError) { throw localError; } catch (Throwable localThrowable) { throw new UndeclaredThrowableException(localThrowable); } } public final boolean equals(Object paramObject) throws { try { return ((Boolean)this.h.invoke(this, m1, new Object[] { paramObject })).booleanValue(); } catch (Error|RuntimeException localError) { throw localError; } catch (Throwable localThrowable) { throw new UndeclaredThrowableException(localThrowable); } } public final int hashCode() throws { try { return ((Integer)this.h.invoke(this, m0, null)).intValue(); } catch (Error|RuntimeException localError) { throw localError; } catch (Throwable localThrowable) { throw new UndeclaredThrowableException(localThrowable); } } public final int sum(int paramInt1, int paramInt2) throws { try { return ((Integer)this.h.invoke(this, m4, new Object[] { Integer.valueOf(paramInt1), Integer.valueOf(paramInt2) })).intValue(); } catch (Error|RuntimeException localError) { throw localError; } catch (Throwable localThrowable) { throw new UndeclaredThrowableException(localThrowable); } } public final String toString() throws { try { return (String)this.h.invoke(this, m2, null); } catch (Error|RuntimeException localError) { throw localError; } catch (Throwable localThrowable) { throw new UndeclaredThrowableException(localThrowable); } } static { try { m3 = Class.forName("com.henry.service.HelloService").getMethod("sayHello", new Class[0]); m1 = Class.forName("java.lang.Object").getMethod("equals", new Class[] { Class.forName("java.lang.Object") }); m0 = Class.forName("java.lang.Object").getMethod("hashCode", new Class[0]); m4 = Class.forName("com.henry.service.HelloService").getMethod("sum", new Class[] { Integer.TYPE, Integer.TYPE }); m2 = Class.forName("java.lang.Object").getMethod("toString", new Class[0]); return; } catch (NoSuchMethodException localNoSuchMethodException) { throw new NoSuchMethodError(localNoSuchMethodException.getMessage()); } catch (ClassNotFoundException localClassNotFoundException) { throw new NoClassDefFoundError(localClassNotFoundException.getMessage()); } } }