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 }
  • 相关阅读:
    Linux 查看本地ip
    php 利用debug_backtrace方法跟踪代码调用
    开源镜像站,vmware下载
    robots.txt 让搜索引擎不再收录网站
    PHP 面向对象 final类与final方法
    开源代码
    PHPStorm设置Ctrl+滚轮调整字体大小
    PHP array_chunk() 妙用
    第九节 JavaScript提取行间事件
    第八节 JavaScript函数的定义和执行
  • 原文地址:https://www.cnblogs.com/ganhang-acm/p/5154384.html
Copyright © 2011-2022 走看看