短视频
2025/12/30大约 2 分钟面试题面试题
来源:短视频
大家好,我是 JJ,今天给大家分享一道高频面试题 JDK动态代理与CGLIB代理的区别
在Java中,JDK动态代理和CGLIB代理是两种常用的代理技术。不过它们在实现方式和适用场景上都存在了一些差异。
JDK动态代理只能代理实现了接口的类,它通过反射机制在运行时生成代理类。
代理类会动态地创建一个实现了目标接口的代理对象,并在方法调用前后执行一些额外的操作。
因为依赖接口,所以如果目标类没有实现接口,就无法使用JDK动态代理。
而CGLIB代理则没有这个限制,它可以代理普通类。
因为它是利用字节码生成库在运行时生成目标类的子类来实现代理。
这个子类会重写目标类的方法,并在方法调用前后执行一些额外的操作。
因为CGLIB代理基于继承,所以目标类没有实现接口,也可以进行代理。
不过需要注意的是,CGLIB代理无法代理被标记为final的方法,因为这些方法不能被重写。
至于选择哪种代理技术取决于具体的需求了。