0%

Java 动态代理(四):Java SDK 代理与 cglib 代理比较

1. Java 中实现动态代理的两种方式的比较

  • Java SDK 代理面向的是一组接口,它为这些接口动态创建了一个实现类。接口的具体实现逻辑是通过自定义的 InvocationHandler 实现的,这个实现是自定义的,也就是说,其背后都不一定有真正被代理的对象,也可能有多个实际对象,根据情况动态选择;cglib 代理面向的是一个具体的类,它动态创建了一个新类,继承了该类,重写了方法
  • 从代理的角度看,Java SDK 代理的是对象,需要先有一个实际对象,自定义的 InvocationHandler 引用该对象,然后创建一个代理类和代理对象,客户端访问的是代理对象,代理对象最后再调动实际对象的方法;cglib 代理的是类,创建的对象只有一个
  • 如果目的都是为一个类的方法增强功能,Java SDK 要求该类必须有接口,且只能处理接口中的方法;cglib 没有这个限制
-------------------- 本文结束感谢您的阅读 --------------------