《Proxy系列专题》:代理模式(静态、JDK、CGLib)使用
现象:在如今互联网时代,项目的复杂度不断的提升,有些场景下需要一定的设计优化来支撑业务的扩展,如为了不改动原始类,但需要对其做相应事件扩展,例如:日志,事物,功能增强等。
思想:想办法用一个B类代表另一个A类的功能,不改变其A类本质。
结果:代理模式出现,这只是一个思想,实现的方式有很多种,如:静态代理、JDK动态代理、CGLib动态代理 等等其他的。
使用方式本文主要写代理模式主要的几种代码的使用,其原理会接下来的文章种输出。
主要的代理方式
静态代理(类似工厂)
动态代理
JDK动态代理(修改字节码方式 + 接口 + 反射)
CGLib动态代理(修改字节码ASM + 继承 + 调用父类super)
静态代理静态代理主要过程(整了一个外套--代理类)
在代理类中实现目标类相同的接口,并设置接口类型变量属性
将目标类实例作为参数传入赋值,如构造器方式,set方式等等
调用时其实是代理类的方法调用了相同目标类的方法,中转一下,在调用目标类方法的前后做一些处理
优点:代理类在编译期生成,效率高。
缺点:代理类会很多,后期维护复杂。
代码逻辑
接口类UserService
public interface UserService { String getUserName(String username); }