乐趣区

关于java:jdk动态代理和cglib动态代理

1、区别:JDK 动静代理和 CGLIB 动静代理是 Java 中两种罕用的动静代理实现形式,它们在实现原理和应用情境上存在一些区别。

JDK 动静代理:
基于接口:JDK 动静代理只能代理实现了接口的指标对象。
动静生成代理类:在运行时通过反射和字节码生成技术动静生成代理类。代理类通过实现与指标对象雷同的接口,并将办法的调用委托给 InvocationHandler 处理器。
效率较高:JDK 动静代理因为间接操作字节码,因而在性能上比拟高效。

CGLIB 动静代理:
基于继承:CGLIB 动静代理能够代理没有实现任何接口的指标对象。
应用字节码加强库:通过应用 ASM 字节码加强库,CGLIB 在运行时生成指标对象的子类作为代理。
创立子类对象:CGLIB 动静代理通过创立指标对象的子类,并重写办法来实现代理性能。
效率较低:绝对于 JDK 动静代理来说,CGLIB 动静代理的生成过程比较复杂,性能稍低。

2、抉择应用 JDK 动静代理还是 CGLIB 动静代理,能够依据具体需要来决定:
如果指标对象实现了接口,且接口办法较为简单,能够抉择应用 JDK 动静代理。
如果指标对象没有实现接口,或者须要代理的办法较简单,能够抉择应用 CGLIB 动静代理。
须要留神的是,动静代理只能代理公共办法,而无奈代理公有办法。另外,对于 final 类型的指标对象或者 final 办法,无论是 JDK 动静代理还是 CGLIB 动静代理都不能代理。

退出移动版