spring jdk代理和cglib代理的区别
时间: 2024-06-06 18:05:18 浏览: 116
Spring框架中JDK动态代理和cglib动态代理
4星 · 用户满意度95%
Spring框架中的AOP支持两种代理方式:JDK代理和CGLIB代理。
JDK代理是基于接口的代理,它要求目标对象必须实现至少一个接口。在运行时,JDK动态地创建一个实现了目标接口的代理类,该代理类持有一个InvocationHandler对象,所有对代理对象的方法调用都会被转发到该InvocationHandler对象的invoke()方法中进行处理。
CGLIB代理是基于继承的代理,它可以代理没有实现任何接口的类。在运行时,CGLIB动态地创建一个目标对象的子类,并重写其中的方法来实现代理。因为CGLIB是通过继承来实现代理的,所以它不能代理final类和final方法。
总的来说,JDK代理是基于接口的,只能代理实现了接口的类,而CGLIB代理是基于继承的,可以代理没有实现接口的类。在性能上,JDK代理比CGLIB代理要快,但是它只能代理实现了接口的类。如果要代理没有实现接口的类,就必须使用CGLIB代理。
阅读全文