CGLIB Proxy 流程

2025/06/04

一、背景

展示 cglib 生成代理对象流程。

CGLIB 是一个常用的字节码生成器的类库。 提供的功能:生成和转换 Java 字节码。

CGLIB 可以覆盖 final 方法

技术背景:在 Java 早期,动态代理主要依赖 JDK 原生的 java.lang.reflect.Proxy,但该机制仅支持接口代理,无法直接代理普通类。CGLIB 则通过字节码生成技术(基于 ASM 框架),实现了对类的代理,弥补了 JDK 代理的局限性。

如果目标类没有实现接口,spring 会强制使用 CGLIB

代理对象和目标对象如何产生联系?

二、流程图

三、测试代码

AopTest.java

Application.java

DemoService.java

ServiceAspect.java

这里的程序都是标准 bean 的生成路径,没有走org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#resolveBeforeInstantiation中的 short-cut 路径(流程图中菱形左侧分支的自定义场景)。