jdk和cglib动态代理区别
时间: 2023-09-26 21:12:41 浏览: 117
浅谈JDK动态代理与CGLIB代理去区别
JDK动态代理和CGLIB动态代理都是实现动态代理的技术,但它们的实现方式有所不同。
JDK动态代理是基于接口的代理,它要求被代理类实现一个接口,并通过反射机制来生成代理对象。因为JDK动态代理是基于接口的,所以只能代理实现了接口的类,不能代理没有实现接口的类。JDK动态代理在生成代理对象时,需要通过反射调用被代理类的方法,因此对于频繁调用的方法,JDK动态代理的性能较差。
CGLIB动态代理则是基于继承的代理,它不要求被代理类实现接口,而是通过继承被代理类来生成代理对象。CGLIB动态代理在生成代理对象时,会在内存中构建一个被代理类的子类,因此对于频繁调用的方法,CGLIB动态代理的性能较好。
需要注意的是,由于CGLIB动态代理是基于继承的,因此无法代理final方法和final类。此外,CGLIB动态代理在生成代理对象时,需要调用被代理类的构造方法,因此被代理类需要有一个无参的构造方法。
阅读全文