动态代理两种实现方式及优缺点
动态代理就是利用反射和字节码的技术,在运行期创建指定接口或类的子类(动态代理)以及其实例对象的技术,以达到无侵入性增强代码的效果。
简要描述下动态代理主要的两种实现方式:
一、JDK原生动态代理
其中关键的两个要素为:
Proxy:newProxyInstance()生成代理对象
InvocationHandler:invoke()增强方法
二、CGLIB(code generation library)动态代理
其中关键的两个要素为:
Enhance:create()生成代理对象
MethodInterceptor:intercept()增强方法
两者优缺点:
JDK原生动态代理:
java原生支持,不需要任何外部依赖,但只能基于接口进行代理。
CGLIB动态代理:
通过继承的方式进行代理,无论目标对象是否实现接口都可以代理,但无法处理final的情况。