标签:
动态代理模式(Dynamic Proxy Pattern):
InvocationHandler该接口唯一方法 invoke(Object proxy, Method method, Object[] args)
Object invoke(Object proxy, Method method, Object[] args) throws Throwable
package com.ant; public interface Hello { public void say(); }
package com.ant; public class HelloImpl implements Hello { @Override public void say() { System.out.println("hellw world!"); } }
package com.ant; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class HelloHandle implements InvocationHandler{ private Object obj; @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null; doBefore(); result = method.invoke( obj,args); doAfter(); return result; } public HelloHandle(Object obj){ super(); this.obj = obj; System.out.println("初始化invocationHandler实例"); } private void doBefore(){ System.out.println("代理前"); } private void doAfter(){ System.out.println("代理后"); } }
package com.ant; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; public class HelloTest { public static void main(String[] args) { Hello hello = new HelloImpl(); InvocationHandler handle = new HelloHandle(hello); //动态创建一个代理对象的类 Hello proxy = (Hello)Proxy.newProxyInstance(hello.getClass().getClassLoader(),hello.getClass().getInterfaces(), handle); proxy.say(); System.out.println(proxy.getClass().getName()); } }
运行结果 :
浅谈-Java设计模式之动态代理
通过 Proxy.newProxyInstance 创建的代理对象是在jvm运行时动态生成的一个对象,它并不是我们的InvocationHandler类型,也不是我们定义的那组接口的类型,而是在运 行是动态生
成的一个对象,并且命名方式都是这样的形式,以$开头,proxy为中,最后一个数字表示对象的标号。
标签:
原文地址:http://www.cnblogs.com/ant-world/p/5422221.html