本文主要介绍
Java
中两种常见的动态代理方式:
JDK原生动态代理
和
CGLIB动态代理
。
什么是代理模式
就是为其他对象提供一种代理以控制对这个对象的访问。代理可以在不改动目标对象的基础上,增加其他额外的功能(扩展功能)。
代理模式角色分为 3 种:
Subject
(抽象主题角色):定义代理类和真实主题的公共对外方法,也是代理类代理真实主题的方法;RealSubject
(真实主题角色):真正实现业务逻辑的类;Proxy
(代理主题角色):用来代理和封装真实主题;
如果根据字节码的创建时机来分类,可以分为静态代理和动态代理:
- 所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和真实主题角色的关系在运行前就确定了。
- 而动态代理的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以在运行前并不存在代理类的字节码文件
静态代理
学习动态代理前,有必要来学习一下静态代理。
静态代理在使用时,需要定义接口或者父类,被代理对象(目标对象)与代理对象(Proxy)一起实现相同的接口或者是继承相同父类。
来看一个例子,模拟小猫走路的时间。
<