本文介绍了Java里面实现动态代理的几种方法。

Java动态代理

1. JDK

1.1. 优点
JDK自带,不需要额外引用

1.2. 缺点
只能实现接口里面方法的代理
速度慢

1.3. 实现机制
根据接口方法动态生成对应的代理类,代理类再将请求转发到InvocationHandler实现类的invoke方法上

2. CGLIB

2.1. 优点
Spring使用的动态代理方法
代码的可读性高

2.2. 缺点
速度相对来说你较慢

2.3. 实现机制
根据接口或者类生成通过继承方式动态生成代理类,代理类再将请求转发到MethodInterceptor的intercept方法上
基于ASM包装

3. JAVASSIST

3.1. 优点
Dubbo使用的动态代理方法
速度较快

3.2. 缺点
代码可读性不高

3.3. 实现机制
和JDK类似,使用代理工厂
通过类似用户自定义的动态代码直接生成代理类

4. ASM

4.1. 优点
速度快
4.2. 缺点
可读性差

5. 性能参考

5.1. https://javatar.iteye.com/blog/814426

6. 其他参考

6.1. https://www.cnkirito.moe/rpc-dynamic-proxy

Contents
  1. 1. 1. JDK
  2. 2. 2. CGLIB
  3. 3. 3. JAVASSIST
  4. 4. 4. ASM
  5. 5. 5. 性能参考
  6. 6. 6. 其他参考