cglib (Code Generation Library ) 是一个第三方代码生成类库,运行时在内存中动态生成一个子类对象从而实现对目标对象功能的扩展。cglib 为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。
JDK动态代理:
CGLIB动态代理:
代理类的生成原理:
实现原理示例:
- public class TargetClass {
- public void doSomething() {
- System.out.println("Target method doing something.");
- }
- }
-
- public class ProxyInterceptor implements MethodInterceptor {
- @Override
- public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
- System.out.println("Before invoking method: " + method.getName());
- Object result = proxy.invokeSuper(obj, args);
- System.out.println("After invoking method: " + method.getName());
- return result;
- }
- }
-
- public class CglibDynamicProxyExample {
- public static void main(String[] args) {
- Enhancer enhancer = new Enhancer();
- enhancer.setSuperclass(TargetClass.class);
- enhancer.setCallback(new ProxyInterceptor());
-
- TargetClass proxy = (TargetClass) enhancer.create();
- proxy.doSomething();
- }
- }
TargetClass 是被代理的普通类。ProxyInterceptor 实现了 CGLIB 的 MethodInterceptor 接口,定义了代理对象的行为,在方法调用前后可以执行自定义的逻辑。CglibDynamicProxyExample 中使用 Enhancer 类创建代理对象,并指定代理对象的超类(即被代理类),以及使用的拦截器。