简介
本文介绍Java中JDK动态代理和CGLib动态代理的区别。
区别概述
项 | JDK动态代理 | CGLIB动态代理 |
接口是否需实现 | 只能代理实现了接口的类。 | 可以代理没有实现接口的类。 |
原理 | 继承自Proxy,Proxy中有InvocationHandler的实现类的引用。 调用被代理的类的方法时,会调用父类(Proxy)的InvocationHandler的invoke方法。 | 对指定的目标类生成一个子类并覆盖其中方法。 |
是否支持final class | 支持。 | 不支持。 因为CGLIB是生成子类来实现AOP。 |
执行效率 | JDK6:比CGLIB效率低一点。 JDK1.7与1.8:效率高于CGLIB(1W次调用,高20%) | JDK1.6之前,效率比JDK高。 |
实例
动态代理(JDK)
动态代理(CGLIB)
请先
!