zoukankan      html  css  js  c++  java
  • 设计模式:代理模式

    概念

    • 代理:静态代理、动态代理

    • 代理角色、被代理的角色(目标对象),由被代理角色来做最终的决定

    • 代理角色通常来说会持有被代理角色的对象引用,以便于代理角色完成工作之前或之后能找到被代理对象,能够通知被代理对象。

    • 静态代理:目标类,代理类。在代理前所有的东西都是已知的,不利于拓展。

    • 动态代理:动态代理类。JDK动态代理(接口)、CGLIB动态代理(继承)。目的是拿到目标类的引用,并且调用目标类的业务方法。在代理前,所有东西是未知的,运行时可以动态生成。

    解决的问题

    AOP实现、拦截器、中介、黄牛、媒婆、解耦、专人做专事、自己不想做又不得不做的事、增强

    原理

    • 1、拿到被代理对象的引用,并且获取到它的所有接口,反射获取
    • 2、JDK Proxy类重新生成一个新的类,同时新的类要实现被代理类所有接口
    • 3、动态生成Java代码,把新加的业务逻辑方法由一定的逻辑代码去调用
    • 4、编译新生成的Java代码.class
    • 5、再重新加载到JVM中运行
    • 以上这个过程就叫字节码重组

    代码

    静态代理:

    动态代理:

  • 相关阅读:
    洛谷 1.5.1 Number Triangles 数字金字塔
    洛谷 Sorting a Three-Valued Sequence 三值的排序
    洛谷 Transformations 方块转换
    POJ 1401 Factorial
    Java面试那些事
    JVM字节码执行引擎
    一个工作三年左右的Java程序员和大家谈谈从业心得
    浅谈volatile关键字
    Java内存模型
    Integer 错误的加锁
  • 原文地址:https://www.cnblogs.com/fcb-it/p/12811687.html
Copyright © 2011-2022 走看看