hooyantsing's Blog

P94 代理模式(4)-Cglib代理

字数统计: 364阅读时长: 1 min
2020/11/11

尚硅谷Java设计模式(图解+框架源码剖析)

Cglib代理

基本介绍
  1. 静态代理和JDK代理模式都要求目标对象是实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候可使用目标对象子类来实现代理-这就是Cglib代理。
  2. Cglib代理也叫做子类代理,他是在内存中建立一个子类对象从而实现对目标对象功能扩展,有些书也将Cglib代理归属到动态代理。
  3. Cglib是一个强大的高性能的代码生成包,它可以在运行期扩展java类与实现java接口,它广泛的被许多AOP的框架使用,例如SpringAOP,实现方法拦截。
  4. 在AOP编程中如何选择代理模式:
    1. 目标对象需要实现接口,JDK代理
    2. 目标对象不需要实现接口,Cglib代理
  5. Cglib包的底层是通过使用字节码处理框架ASM来转换字节码并生成新的类。

重点

  1. 需要引入Cglib的jar文件
    1. asm.jar
    2. asm-commons.jar
    3. asm-tree.jar
    4. cglib-2.2.jar
  2. 在内存中动态构建子类,注意代理类不能为final,否则报错java.lang.illegalArgumentException
  3. 目标对象的方法如果为final/static,那么不会执行目标对象额外的业务方法。

案例 课堂

案例代码详见视频。

CATALOG
  1. 1. Cglib代理
    1. 1.1. 基本介绍
  2. 2. 重点
  3. 3. 案例 课堂