JDK代理与CGLib代理的区别
2019-02-13 本文已影响5人
Real_man
Spring的AOP动态代理有两种实现方式,那么这两种代理方式有什么区别呢?
区别
实现上,如果类是接口的时候或者类是JDK创建的proxy类时使用的是JDK的,否则使用CGLib代理。
img- JDK动态代理必须要有接口,具体用法参考Java使用Porxy和InvocationHandler实现动态代理
- CGLIB可以对任何没有声明Final的类进行代理。CGLib主要是通过创建子类的方法,在父类的方法外进行操作
性能上:JDK代理需要JVM底层上进行方法的分发,而CGLib运行创建特定的字节码来改善性能,这是别人做的性能对比。
image.png看上去CGLib会更快一点呢