一、静态代理
在介绍动态代理之前,先了解下静态代理。
1.1静态代理的概念:为其它对象提供一种代理以控制对这个对象的访问控制;在某些情况下,客户不想或者不能直接引用另一个对象,这时候代理对象可以在客户端和目标对象之间起到中介的作用。用到里设计模式中的代理模式。
静态代理类:由程序员创建或者由第三方工具生成,再进行编译;在程序运行之前,代理类的.class文件已经存在了。
静态代理类通常只代理一个类。
静态代理事先知道要代理的是什么
1.2静态代理的优缺点:
优点:简单易懂,实现容易
缺点:当要代理的对象很多时,需要创建很多代理类,不易维护
二、动态代理
动态代理其实就是为了解决静态代理的缺点而产生的,有没有可能一个代理类通过传参方式代理所有同一场景的类或接口。
答案是有的,就是通过动态生成代理类的方式,事先不用创建代理类,运行时通过传参动态创建。
Java动态代理目前分JDK动态代理和CGLIB代理(第三方工具库创建的)。
2.1 JDK代理
创建JDK代理的步骤:
1.创建一个接口
2.创建一个实现接口的类
3.实现InvocationHandler接口
4.通过Proxy实例化一个代理类
5.用代理类调用方法
下面通过实例讲解:
创建HelloService
创建实现接口的类:
实现InvocationHandler接口:
动态创建代理类:
通过代理类调用方法
总结:
从JDK代理的实现步骤来看,必须要有一个接口,然后还有一个实现类。
缺点:必须要有接口
2.2 CGLIB代理
CGLIB代理的特点是可以代理接口,也可以代理类,对被代理的目标对象比较宽松。
CGLIB是一个第三方维护的库,全称:Code Generation Library.
下面通过代理讲解CGLIB的实现步骤:
代理类:
当然,也可以把callback函数封装一下:
代理接口:
完整代理请在这里下载:
https://download.csdn.net/download/cixiao/87320389