0
点赞
收藏
分享

微信扫一扫

java 中的代理

眸晓 2022-03-11 阅读 72

1、B站链接

B站链接:https://www.bilibili.com/video/BV1M54y1X78p?from=search&seid=12892498772732488811&spm_id_from=333.337.0.0

代码(gitee上):git@gitee.com:jin-nengshuai_admin/java-learn-code.git

2、几个概念

代理

给一个对象A 提供一种代理对象 ,来控制对 A 的访问。

代理对象 作为“替身”,替代了原有对象。

通俗来说,代理即为 代替处理。由 另一个对象来替代原对象,处理某些逻辑。

代理的作用:

  • 在不修改原对象代码的基础上,对原对象功能进行 修改或增强。

  • 当想给某些对象添加一些额外的逻辑时(例如 访问权限,日志,… ),使用代理模式。我们可以不修改源代码,只针对这些额外的功能进行编码。在整个过程中,原对象的逻辑和额外增加的逻辑完全解耦,互补干扰。

耦合

项目中的各个模块和组件,当一个发生变动和调用的时候,其他模块和组件也跟着发生变动和调用,产生了强烈的联系。

当模块或组件耦合度过高的时候,会带来难以扩展,维护性差,纠错困难等问题。

解耦

削减或消除 耦合度

目标类

原对象 所对应的类。

通过代理对象 来控制对 原对象 的访问,扩展 原对象的功能。

代理类

代理模式产生的对象,是原对象的替身。

在原有对象的基础上,修改逻辑。

3、创建代理对象

3.1、总述

在 Java中,代理有三种方式来创建 代理对象:

  • 静态代理 【要么继承目标类;要么实现 目标类已经实现过的 相同接口】
  • 基于 JDK(接口) 的动态代理
  • 基于 CGLIB(父类) 的动态代理

静态代理:

  • 我们会手写代理类的代码。项目中会有 代理类的源码,代理类 会被编译后执行。

  • 方法:

    • 1、目标类会实现某个接口,代理类会和 目标类 实现相同的接口
    • 2、代理类直接继承目标类
  • 分析:静态代理完成了解耦。但静态代理类的 代码维护依然非常复杂,一旦接口或者父类发生了变动,则代理类的代码也会随之修改。在代理类多的时候,维护非常麻烦。故在实际开发中,一般使用动态代理的方式。

image-20220216232011282

动态代理:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iUAq8jKc-1646466408452)(C:\Users\18234827921\AppData\Roaming\Typora\typora-user-images\image-20220216231457185.png)]

3.2、静态代理

3.3、基于 JDK(接口) 的动态代理

image-20220217001543674

前两个参数:

image-20220304095843111

第三个参数是一个接口,它里面只有一个方法 invoke 。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aKkdOq6a-1646466408454)(C:\Users\18234827921\AppData\Roaming\Typora\typora-user-images\image-20220304100543720.png)]

image-20220304100153098

3.4、基于 CGLIB(父类) 的动态代理

image-20220304174019404

举报

相关推荐

0 条评论