zoukankan      html  css  js  c++  java
  • 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类的静态方法,创建代理对象,并把返回值转为接口类型

  • 相关阅读:
    小白的springboot之路(三)、集成mybatis与MySQL
    小白的springboot之路(四)、mybatis-generator自动生成mapper和model、dao
    springboot打印SQL及多环境配置
    小白的springboot之路(二)、集成swagger
    小白的springboot之路(一)、环境搭建、第一个实例
    npm切换成淘宝镜像源
    无废话设计模式(0)--设计模式的六大原则
    java之--加密、解密算法
    【Java】Java中的final关键字和static
    Add an Action that Displays a Pop-up Window 添加显示弹出窗口按钮
  • 原文地址:https://www.cnblogs.com/ethnic/p/14539872.html
Copyright © 2011-2022 走看看