设计模式:代理模式

概念

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

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

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

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

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

解决的问题

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

原理

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

代码

静态代理:

动态代理:

原文地址:https://www.cnblogs.com/fcb-it/p/12811687.html