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类的静态方法,创建代理对象,并把返回值转为接口类型

  • 相关阅读:
    页面小标签
    mysql 给表和字段加注释
    jackson中的@JsonBackReference
    spring boot 学习
    bootstrapTable 学习使用
    $.ajax()方法详解
    2020全新出发,DevExpress WPF 计划发布功能蓝图—Part 5
    Web UI开发神器—Kendo UI for jQuery数据管理之搜索/分页功能
    Winforms界面开发小技巧揭秘!DevExpress 自动建议功能
    Themes、Windows UI控件新玩法—DevExpress WPF v19.2
  • 原文地址:https://www.cnblogs.com/ethnic/p/14539872.html
Copyright © 2011-2022 走看看