• 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. }  
  • 相关阅读:
    Es6中的模块化Module,导入(import)导出(export)
    js:构造函数和class
    promise返回状态
    ES6之promise(resolve与reject)
    nodeJS 取参 -- req.body & req.query & req.params
    Android UI编程进阶——使用SurfaceViewt和Canvas实现动态时钟
    Android自定义控件前导基础知识学习(一)——Canvas
    Android挂载以点号(.)开头的文件夹或是文件
    Android UI编程之自定义控件初步(下)——CustomEditText
    Android UI编程之自定义控件初步(上)——ImageButton
  • 原文地址:https://www.cnblogs.com/fx2008/p/3569467.html
Copyright © 2020-2023  润新知