zoukankan      html  css  js  c++  java
  • java 动态代理

    1.抽象角色(之前是抽象类,此处应改为接口)   

    Java代码  收藏代码
    1. public interface Subject     
    2. {     
    3.     public void request();     
    4. }  


    2.具体角色  

    Java代码  收藏代码
    1. public class RealSubject implements Subject     
    2. {     
    3.     
    4.     public RealSubject()     
    5.     {     
    6.     }     
    7.     
    8.     public void request()     
    9.     {     
    10.         System.out.println("真正做事的。");     
    11.     }     
    12. }  



    3.代理处理器   
    /**  
    * 该代理类的内部属性为Object类,实际使用时通过该类的构造函数DynamicSubject(Object obj)对其赋值;  
    * 此外,在该类还实现了invoke方法,该方法中的 method.invoke(sub,args);  
    * 其实就是调用被代理对象的将要被执行的方法,方法参数sub是实际的被代理对象,  
    * args为执行被代理对象相应操作所需的参数。  
    * 通过动态代理类,我们可以在调用之前或之后执行一些相关操作  
    */  

    Java代码  收藏代码
    1.    
    2. public class DynamicSubject implements InvocationHandler     
    3. {     
    4.     private Object sub;     
    5.     
    6.     public DynamicSubject()     
    7.     {     
    8.     }     
    9.     
    10.     public DynamicSubject(Object obj)     
    11.     {     
    12.         sub = obj;     
    13.     }     
    14.     
    15.     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable     
    16.     {     
    17.         System.out.println("调用前" + method);     
    18.     
    19.         method.invoke(sub, args);     
    20.     
    21.         System.out.println("调用后 " + method);     
    22.     
    23.         return null;     
    24.     }     



    4.客户端 

    Java代码  收藏代码
      1. public class Client     
      2. {     
      3.     static public void main(String[] args) throws Throwable     
      4.     {     
      5.     
      6.         RealSubject rs = new RealSubject(); // 在这里指定被代理类     
      7.         InvocationHandler ds = new DynamicSubject(rs);     
      8.         Class<?> cls = rs.getClass();     
      9.     
      10.         // 以下是一次性生成代理     
      11.     
      12.         Subject subject = (Subject) Proxy.newProxyInstance(     
      13.                 cls.getClassLoader(), cls.getInterfaces(), ds);     
      14.     
      15.         subject.request();     
      16.     }     
      17. }  
  • 相关阅读:
    [Objective-C语言教程]继承(25)
    [Objective-C语言教程]类和对象(24)
    [Objective-C语言教程]命令行参数(23)
    [Objective-C语言教程]错误处理(22)
    [Objective-C语言教程]日志处理(21)
    转 路径中 斜杠/和反斜杠 的区别
    转 Oracle 12C 之 CDB/PDB用户的创建与对象管理
    win10怎么启用网络发现,网络发现已关闭怎么办
    转 Oracle12c/11个 Client安装出现"[INS-30131]"错误“请确保当前用户具有访问临时位置所需的权限”解决办法之完整版
    转 Oracle DBCA高级玩法:从模板选择、脚本调用到多租户
  • 原文地址:https://www.cnblogs.com/fx2008/p/3569467.html
Copyright © 2011-2022 走看看