跳到主要内容

AOP详解-CGLIB实现AOP

1. 动态代理实现 AOP 的缺陷

  • Java 动态代理是基于接口的,有时目标对象并没有实现接口

2. CGLIB 实现代理的原理

  • 动态代理实现 AOP: 针对目标类,使用动态代理实现 AOP 需要再写一个增强的接口,让目标类实现增强接口,然后就可以通过动态代理实现目标类的增强
  • CGLIB 实现 AOP: CGLIB 会动态创建一个目标类的子类,然后返回子类的对象,也就是增强对象,增强的逻辑在子类中完成
    目标子类 = 目标类 + 增强逻辑
    CGLIB 使用动态字节码技术,通过转换字节码生成新的类来实现改变一个类的内部逻辑

3. 使用 CGLIB 实现 AOP

  • 实现步骤:
    • 首先实现一个 MethodInterceptor,方法调用会被转发到该类的 intercept() 方法
    • 在需要使用 SomeService(目标对象)时,通过 CGLIB 动态代理获取代理对象