zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    目前流行的缺陷管理工具
    高性能WEB开发之Web性能测试工具推荐
    测试工具
    简单的事件示例代码
    C#常用代码片段备忘
    C# 获取变量或对象的栈与堆地址
    C#常用的命名规则汇总
    C# 成员默认访问权限(public、private、protected、internal)
    C# 学习路线
    简单的异常例子
  • 原文地址:https://www.cnblogs.com/ganhang-acm/p/5154384.html
Copyright © 2011-2022 走看看