java学习之动态代理模式

 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 }

 

posted @ 2016-01-23 23:48  CodeNoob  阅读(274)  评论(0编辑  收藏  举报