JDK动态代理和CGLIB动态代理的区别

92 阅读1分钟

JDK动态代理和CGLIB动态代理的区别

  • Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理

  • JDK动态代理

  1. JDK动态代理只提供接口的代理,不支持类的代理。

  2. JDK会在运行时为目标类生成一个动态代理类proxy*.class 该代理类是实现了接目标类接口的一个类,并且会实现接口所有的方法增强代码。 标方法。从而实现AOP调用时先去调用处理类进行增强,再通过反射的方式进行调用如果代理类没有实现 接口。

  • CGLIB动态代理
  1. CGLIB的底层是通过ASM在运行时动态的生成目标类的一个子(还有其他相关类)会生成多个 并且会重写父类所有的方法增强代码

  2. 调用时先通过代理类进行增强,再直接调用父类对应的方法进行调用目标方法。从而实现AOP。

  3. CGLIB是通过继承的方式做的动态代理,因此如果某个类标记为final,那么它是无法使用CGLIB做动态代理的。