1,基于接口的动态代理必须首先要定义接口:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package com.tong.qiu.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * Created by ywb */ public interface Subject { void doSomething(); void somethingElse(String arg); } class DynamicProxyHandler implements InvocationHandler { private Object proxied; public DynamicProxyHandler(Object proxied) { this .proxied = proxied; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println( "**** proxy: " + proxy.getClass() + ", method: " + method + ", args: " + args); if (args != null ) for (Object arg : args) System.out.println( " " + arg); return method.invoke(proxied, args); } } class RealObject implements Subject { public void doSomething() { System.out.println( "doSomething" ); } public void somethingElse(String arg) { System.out.println( "somethingElse " + arg); } } class SimpleDynamicProxy { public static void consumer(Subject iface) { iface.doSomething(); iface.somethingElse( "bonobo" ); } public static void main(String[] args) { RealObject real = new RealObject(); consumer(real); Subject proxy = (Subject) Proxy.newProxyInstance( //此处生成代理对象 Subject. class .getClassLoader(), new Class[]{ Subject. class }, new DynamicProxyHandler(real)); consumer(proxy); } } |
1,基于接口的动态代理必须首先要定义接口:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package com.tong.qiu.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * Created by ywb */ public interface Subject { void doSomething(); void somethingElse(String arg); } class DynamicProxyHandler implements InvocationHandler { private Object proxied; public DynamicProxyHandler(Object proxied) { this .proxied = proxied; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println( "**** proxy: " + proxy.getClass() + ", method: " + method + ", args: " + args); if (args != null ) for (Object arg : args) System.out.println( " " + arg); return method.invoke(proxied, args); } } class RealObject implements Subject { public void doSomething() { System.out.println( "doSomething" ); } public void somethingElse(String arg) { System.out.println( "somethingElse " + arg); } } class SimpleDynamicProxy { public static void consumer(Subject iface) { iface.doSomething(); iface.somethingElse( "bonobo" ); } public static void main(String[] args) { RealObject real = new RealObject(); consumer(real); Subject proxy = (Subject) Proxy.newProxyInstance( //此处生成代理对象 Subject. class .getClassLoader(), new Class[]{ Subject. class }, new DynamicProxyHandler(real)); consumer(proxy); } } |