jdk和cglib的底层运行原理
时间: 2024-04-22 10:25:05 浏览: 85
jdk与cglib动态代理与底层实现
JDK和CGLIB是Java中常用的两种字节码增强技术,它们在底层运行原理上有一些区别。
JDK的动态代理基于接口实现,它在运行时生成一个代理类,该代理类实现了被代理接口,并且包含了一些额外的逻辑。当调用代理对象的方法时,实际上会被转发到InvocationHandler中定义的invoke方法中,从而实现了对原始方法的增强。JDK动态代理通过Java反射机制来实现,这意味着被代理的类必须实现一个接口。
CGLIB则是通过继承来实现动态代理。它在运行时通过生成被代理类的子类来实现动态代理,并且重写了被代理类中的方法,在重写的方法中可以添加额外的逻辑。由于CGLIB是基于继承实现的,所以对于final类或者final方法是无法进行代理的。
总的来说,JDK动态代理适用于基于接口的代理,而CGLIB适用于对类进行代理。JDK动态代理在运行时生成代理类,而CGLIB则是在编译时生成代理类。由于CGLIB是继承实现的,所以在性能上可能会比JDK动态代理稍微慢一些,但它可以代理没有实现接口的类。
阅读全文