• JDK动态代理


    1.InvocationHandler接口

      里面有三个类:InvocationHandler,Method,proxy

      InvocationHandler接口(调用处理器),就一个方法,invoke(),表示代理对象要执行的功能代码

      代理类完成的功能:

        1.调用目标方法,执行目标方法的功能

        2.功能增强,在目标方法调用时,增加功能

    方法原型:

    public Object invoke(Object proxy, Method method, Object[] args)
    

      参数:

      Object proxy:jdk创建的代理对象,无需赋值

      Method method:目标类中的方法,jdk提供的method对象

      Object[] args:目标类中方法的参数,jdk提供

    InvocationHandler接口:表示你的代理要干什么

      用法:

      1.创建类实现接口InvocationHandler

      2.重写invoke()方法,把原来静态代理中代理类需要完成的功能,写在这里;

    2.Method类:表示方法的,目标类中的方法

    作用:

      通过Method可以执行某个目标类的方法,Method.invoke();

      method.invoke(目标对象,方法的参数)

      method.invoke(demo,"李四");

      

      method.invoke()就是用来执行目标方法的,等同于静态代理中的

      //向厂家发送订单,告诉厂家,我买了U盘,厂家发货

      float price = factory.sell(amount);

    3.Proxy类:核心对象,创建代理对象。

      方法:静态方法,newProxyInstance(),作用是创建代理对象,等同于在静态代理中创建TaoBao tao = new TaoBao();

      

      方法原型:

      

    public static Object newProxyInstance(ClassLoader loader,
                                              Class<?>[] interfaces,
                                              InvocationHandler h)
    

      参数:

      1.ClassLoader loader:类加载器,负责向内存中加载对象

       例子:类a,a.getclass().getClassLoader(),目标对象的类加载器

      2.Class<?>[] interfaces:接口,目标对象实现的接口,也是反射获取的

      3.InvocationHandler h:自己写的,代理类要完成的功能

      返回值:就是代理对象

    4.实现动态代理的步骤

      1.创建接口,定义目标类要完成的功能

      2.创建目标类实现接口

      3.创建InvocationHandler接口的实现类,在invoke方法中完成代理类的功能

        1.调用目标方法

        2.功能增强

      4.使用Proxy类的静态方法,创建代理对象,并把返回值转为接口类型

  • 相关阅读:
    ios8 xcode6 下的启动界面设置和图标设置
    写一些有关android的东西吧,那时候玩android时候的一些笔记
    使用sqlite3 有关tableview删除cell的问题
    iOS 使用CLGeocoder获取地理位置
    ios 解决有关火星坐标的问题
    iOS 火星坐标相关整理及解决方案汇总(转)
    IOS开发UI篇之──自定义UIActionSheet
    python中新式类和经典类的区别
    python中几个常用的算术函数
    多线程
  • 原文地址:https://www.cnblogs.com/ethnic/p/14539872.html
Copyright © 2020-2023  润新知