《Proxy系列专题》:代理模式(静态、JDK、CGLib)

《Proxy系列专题》:代理模式静态、JDK、CGLib)使用

  现象:在如今互联网时代,项目的复杂度不断的提升,有些场景下需要一定的设计优化来支撑业务的扩展,如为了不改动原始类,但需要对其做相应事件扩展,例如:日志,事物,功能增强等。

  思想:想办法用一个B类代表另一个A类的功能,不改变其A类本质。

  结果:代理模式出现,这只是一个思想,实现的方式有很多种,如:静态代理、JDK动态代理、CGLib动态代理 等等其他的。

 使用方式

  本文主要写代理模式主要的几种代码的使用,其原理会接下来的文章种输出。

  主要的代理方式

静态代理(类似工厂)

动态代理

JDK动态代理(修改字节码方式 + 接口 + 反射)

CGLib动态代理(修改字节码ASM + 继承 + 调用父类super)

 静态代理

  静态代理主要过程(整了一个外套--代理类)

在代理类中实现目标类相同的接口,并设置接口类型变量属性

将目标类实例作为参数传入赋值,如构造器方式,set方式等等

调用时其实是代理类的方法调用了相同目标类的方法,中转一下,在调用目标类方法的前后做一些处理

  优点:代理类在编译期生成,效率高。

  缺点:代理类会很多,后期维护复杂。

代码逻辑

  接口类UserService

public interface UserService { String getUserName(String username); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyfwxz.html