标签:
1 package com.gh.dynaproxy; 2 3 import java.lang.reflect.InvocationHandler; 4 import java.lang.reflect.Method; 5 /** 6 * 动态代理类 7 * @author ganhang 8 * 9 */ 10 public class DynaProxy implements InvocationHandler{ 11 private Object ob;//被代理对象 12 public DynaProxy(Object ob){ 13 this.ob=ob; 14 } 15 private void before(){ 16 System.out.println("为代理对象找对象中。。"); 17 } 18 private void after(){ 19 System.out.println("相亲完成。。"); 20 } 21 22 @Override 23 public Object invoke(Object proxy, Method method, Object[] args) 24 throws Throwable { 25 Object obj=null; 26 before(); 27 obj=method.invoke(ob, args);//真正调用业务方法 28 after(); 29 return obj; 30 } 31 }
1 package com.gh.dynaproxy; 2 /** 3 * 被代理类 4 * @author ganhang 5 * 6 */ 7 public class Person implements Subject{ 8 private String name; 9 public Person(String name){ 10 this.name=name; 11 } 12 @Override 13 public void miai() { 14 System.out.println(name+"正在相亲中..."); 15 } 16 17 }
1 package com.gh.dynaproxy; 2 /** 3 * 要代理的主题接口 4 * @author ganhang 5 * 6 */ 7 public interface Subject { 8 9 public void miai(); 10 11 }
1 package com.gh.dynaproxy; 2 3 import java.lang.reflect.Proxy; 4 /** 5 * 动态代理 6 * @author ganhang 7 * 8 */ 9 public class test { 10 public static void main(String[] args){ 11 Person p=new Person("小白"); 12 DynaProxy dp=new DynaProxy(p); 13 //Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类 14 //newProxyInstance(定义代理类的类加载器,代理类要实现的接口列表,InvocationHandler接口) 15 //返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。它由指定的类加载器定义,并实现指定的接口 16 Subject s=(Subject)Proxy.newProxyInstance(p.getClass().getClassLoader(), p.getClass().getInterfaces(),dp); 17 s.miai(); 18 } 19 }
标签:
原文地址:http://www.cnblogs.com/ganhang-acm/p/5154384.html