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

    一,什么是代理

      先说说代理,字面理解就是代替处理。常见的就是代理商,代理点,代替上游的团体处理某些事情。再实际一点就是类似于公司的总经理助理,总经理传达命令或者其他人上报事情,都通过助理,对外来讲助理助理就是总经理的牌面,替代总经理。

      在jiava中,一般就是对某个对象进行代理,代理对象可以有原来对象所有功能(对于某个方法而言),也可以对这个方法功能进行修改,添加一下其他逻辑,甚至不要原来对象的功能。代理对象重新定义其他功能。

      首先注意:

        第一点,在调用代理对象的方法时候,方法名和原来对象的方法名一模一样。但是逻辑处理完全不一样,可以有原来对象的所有功能,也可以增加逻辑,也可以去掉原来的功能。

        第二点,如果对某个对象进行动态代理,那么需要给这个接口和一个实现类,还要一个具体的对象,然后创建这个对象的代理的对象,但是,创建代理对象不是一定要有实现类和实例对象,

      如果只是要给这个接口创建一个代理对象,那么只需要一个接口就可以了。

    二,代理分类

      在Java里面,分为动态代理,静态代理,其中动态代理又分为JDK动态代理,Cglib动态代理。

      动态代理和静态代理区别:动态代理的类是在程序运行期间,在内存里面生成的,不是我们事先写好的类,也就是说在程序运行之前,这个类是不存在的。

      JDK动态代理:也叫接口动态代理,被代理的对象,它的类必须实现了至少一个接口,不然是不能创建JDK动态代理对象的。本质就是生成一个新的类,这个类也去实现这个接口,那么代理对象就有原对象相同的功能。可以再代理类里面添加原对象作为属性,在代理类的处理方法中,调用原对象的方法,这样就使得代理对象有原对象的功能。

      Cglib动态代理:通过继承的方式,创建一个子类对象,重写原来类里面的方法。实现功能的代理。

    三,代理的代码实现

      1,动态代理,创建代理对象条件(或者说需要的参数)一个类加载器,一个Class数组(需要被代理接口的字节码对象,可能有的对象实现了多个接口,所以是数组),一个InvocationHandler接口的实现类对象。

        

      

  • 相关阅读:
    【STM32F407】第2章 嵌入式网络协议栈基础知识
    【STM32H7】第1章 当前主流的小型嵌入式网络协议栈
    【STM32F429】第1章 当前主流的小型嵌入式网络协议栈
    【STM32F407】第1章 当前主流的小型嵌入式网络协议栈
    Linux(centos)使用docker安装pdf2htmlEX
    JAVA实现查询栏目、类别(菜单)返回树结构(递归)
    maven打包 运行出现 错误: 找不到或无法加载主类 jar
    IDEA版本2020.1全局MAVEN配置
    注解版mybatis动态语句将空字符串转换为null
    Windows系统安装ActiveMQ
  • 原文地址:https://www.cnblogs.com/huayuyou/p/11029206.html
Copyright © 2011-2022 走看看