静态代理和JDK动态代理都有一个前提,那就是被代理类必须实现了接口,否则,这两种代理就不能实现。为了解决这个限制,就出现了Cglib动态代理。一些第三方框架多数都用的是Cglib代理,如spring框架的AOP的实现。
静态代理和JDK动态代理都是通过实现接口,来生成代理类以扩展目标类的功能。Cglib动态代理由于没有接口可以实现,所以采取了继承目标类来生成代理类以扩展目标类的功能。据我猜测,Cglib动态代理生成的子类应该重写了目标类的方法,以此达到扩展的目的。
静态代理和JDK动态代理通过实现和目标类的接口,来确保代理类和被目标类拥有相同的方法。Cglib则是通过继承目标类的方法来确保代理类和目标类拥有相同的方法。三种代理都是通过某种“重写”方法的方式来实现目标类功能的扩展。
原文:https://www.cnblogs.com/jxdr/p/11988031.html