动态代理的两种方式:JDK和cglib
一、动态代理
特点: 字节码随用随取,随用随加载
作用: 在不修改源码的基础上对方法增强
二、两种代理比较
特点 | 涉及的类 | 提供者 | 如何创建代理对象 | 创建代理对象的要求 | |
---|---|---|---|---|---|
JDK | 基于接口 | Prox | JDK官方 | Proxy.newProxyInstance() | 被代理类中至少实现一个接口 |
cglib | 基于子类 | Enhancer | 第三方cglib包 | Enhancer.create() | 被代理类不能是最终类 |
三、JDK代理的实现
Proxy.newProxyInstance参数详解
- ClassLoad: 类加载器,加载代理对象的字节码。这样就和被代理对象使用相同的类加载器。固定写法
- interface: 让代理对象和被代理对象有相同的方法。固定写法
- InvocationHandler:用于提供增强的代码
注意:被代理对象需要是final的
四、cglib代理的实现