ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

代理(静态和动态)

2026/8/14 15:40:36 拓冰建站 浏览量
代理(静态和动态)

一种设计模式,提供对目标对象的另外一种访问方式,通过代理对象访问目标对象

1.静态代理

代理类和目标类共同实现同一个接口

实现例子:

接口:

代理类:

目标类:

测试类:

2.动态代理 :基于jdk的动态代理和基于cglib的动态代理

1.jdk的动态代理(必须有接口)

前后服务不能写入已经写好的代理类里,所以要有个专门写增强逻辑的代码;

代理类不是自己写的,直接拿着代理类去创建对象

例子:测试类:

目标类:

增强规则类:

接口类:

静态代理和jdk动态代理区别:

静态代理:自己手写代理类 Java 文件,编译就存在。接口加新方法,代理类必须手动重写,增强代码分散在各个方法,复用差。直接对象调用,不用反射。

JDK 动态代理不手写代理类,运行时 JDK 在内存自动生成代理类字节码。只写InvocationHandler,所有方法的增强全部写在invoke()一处;接口新增方法不用改代理代码,复用性强;底层靠反射执行目标方法。

2.基于cglib的代理(不能代理被final实现的类或方法)

原理:通过继承在继承目标方法的基础上实现更多的逻辑

例子:

CGLIB拦截回调类 CallbackMethod

jdk和cglib动态代理区别:

jdk动态:1.代理对象实现目标接口类 2.原生jdk,无需额外包 3.必须有接口

cglib动态:1.代理对象是目标类的子类 2.需要第三方cglib asm 3.不需要接口,不能代理final类/final方法