动态代理设计模式
JDK动态代理实现
动态代理利用了JDK API,动态地在内存中构建代理对象,从而实现对目标对象的代理功能.动态代理又被称为JDK代理或接口代理.
静态代理与动态代理的区别:
-
静态代理在编译时就已经实现了,编译完成后代理类是一个实际的class文
-
动态代理是在运行时动态生成的,即编译完成后没有实际的class文件,而是在运行时动态生成类字节码,并加载到JVM中.
cglib动态代理
cglib (Code Generation Library ) 是一个第三方代码生成类库,运行时在内存中动态生成一个子类对象从而实现对目标对象功能的扩展。cglib 为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。
-
最底层是字节码
-
ASM是操作字节码的工具
-
cglib基于ASM字节码工具操作字节码(即动态生成代理,对方法进行增强)
-
SpringAOP基于cglib进行封装,实现cglib方式的动态代理
cglib代理流程
推荐阅读
技术总体方案设计思路-CSDN博客