当前位置: 首页 > news >正文

AOP基本概念

上述语句解释感觉太过玄妙不似常人能够听懂,所以结合自己理解,给自己留点备注:

首先

目标对象:

就是这要对哪个对象进行代理,因为AOP是面向切面编程,在OOP的基础上再次解耦合,这个过程需要提取代理来代表原本的自定义对象,从而实现解耦合。

至于为什么能够实现解耦合呢?

比如现在有多个类A、B、C,这三个类中都调用了两个类a和b,并且类a必须在类b前进行执行,

此时如果需要对类a进行修改,那么有可能就会对A、B、C的导入a的内容进行修改,那么此时耦合就很严重。

为了解决这个问题,引入了AOP。

Proxy代理

接着目标对象来继续解释:

如何使用AOP解耦合?

这里就需要使用到代理proxy,代理可以看作是类a的一个对象,只不过这个对象不是在编译时期就固定的,而是在后续的运行途中进行动态创建的。

什么是动态创建呢?为什么要进行动态创建?

可以设想为:在代码运行过程中,当需要创建a类的对象a1时,那么此时可以通过框架动态创建出a1,此时我们成这个对象a1为proxy代理。

便于理解的说(也许不准确),代理就是一个对目标类动态生成的对象。

Joinpoint连接点:

这里的点在java中就代表的是对象对应的方法,并且这些方法是可以被增强的。

举个例子:我买彩票有可能中5个亿,换句话说我有中5个亿的方法,那么我的这个方法就叫做连接点。同理张三李四王二麻子都有中5个亿的方法,那么他们中奖的方法也是连接点。

那么什么又是增强?

增强其实就是对本有的方法进行修改,

还是刚才的例子,我有机会中5个亿,概率为10%,那么通过增强,我中5个亿的方法被修改为我有100%概率中5个亿。

简单讲:增强就是对切入点的修改(也许不准确)

Pointcut切入点:

刚才我们说了,点实际上在java中指的就是方法,那么切入点,指的就是可以被切入的方法。

那么什么又是切入?切入了要做什么?

我们刚才在连接点说了方法是可以被增强的,那么已经被选中要增强的点就是切入点。

还是刚才的例子,我与张三李四王二麻子都有可能中5个亿,但是现在我的方法已经被选定增强为100%概率中5个亿。此时我的方法就是切入点,而张三李四王二麻子的方法还只是连接点。

所以,简单讲切入点就是一个过滤器,过滤出来的连接点就是切入点。

可以看出连接点包含了切入点,切入点是连接点筛选后的点。

Advice通知\增强:

增强实际上就是对原有方法的逻辑修改。

还是刚才的例子,为什么我被增强后就有100%的概率中5个亿?这实质上就是增强的逻辑表达,我现在不想100%中5个亿,那么就可以通过修改对应的增强逻辑来实现,比如修改逻辑为我的方法有99.9999%的概率中5个亿。

Aspect切面:

aspect就是AOP中的A,这个切面实际上就是切入点与通知的组合,也就是增强的一个完整逻辑。

为什么这么说?

增强只是修改方法的逻辑,缺少指定修改方法这个对象。

切入点只是过滤出需要被修改的方法,而缺少对应修改的逻辑。

所以这两者进行结合才能真正意义上完成:对某个对象的某个方法进行修改。

Weaving织入:

织入实质上就是指创建代理并其作用的完整过程。

这个代理需要包含对应对象、对象对应的方法,方法对应的增强的逻辑,最终集齐要素后动态创建代理的这个过程就是织入。

http://www.xdnf.cn/news/21241.html

相关文章:

  • 【工具变量】地市农业播种面积及粮食产量等21个相关指标(2013-2022年)
  • 打造搜索神功:Express 路由中的关键词探查之道
  • 【linux学习】 Redhat9.5安装
  • vue+flask+CNN电影推荐系统
  • 从零基础深入学习的语音信号处理系统
  • 大模型应用_AutoGPT
  • 折扣电影票api对接详细指南,如何对接?
  • 颚式破碎机的设计
  • 【深度学习—李宏毅教程笔记】Self-attention
  • 【从零实现高并发内存池】申请、释放内存过程联调测试 与 大于256KB内存申请全攻略
  • 一本通 2063:【例1.4】牛吃牧草 1005:地球人口承载力估计
  • FPGA学习——DE2-115开发板上设计波形发生器
  • Sigma-Delta ADC(ΣΔ-ADC)中的量化器简介
  • 解决Windows安全中心显示空白页面
  • L2-002 链表去重
  • 云蝠智能大模型:赋能 AI 呼叫行业,开启智能通信新时代
  • 知识库建设全流程指南(AI时代优化版)
  • virtualbox安装xp系统卡顿的解决
  • 泛型算法——只读算法(三)
  • Semantic Kernel 核心组件 Pipeline:AI 应用的流程引擎
  • Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(六)
  • 破解监控摄像头应用难题:EasyCVR视频监控管理平台的多维解决方案
  • Vue3使用AntvG6写拓扑图,可添加修改删除节点和边
  • 统计字符串每个字符出现频率
  • <sql>、<resultMap>、<where>、<foreach>、<trim>、<set>等标签的作用和用法
  • CCS编译器无法导入工程文件,检查原因是版本编译器编译问题
  • Oracle 19c部署之RMP一键安装初始化(五)
  • [TriCore][TC3XX][用户手册] - 16.中断控制器 - IR
  • MATLAB 控制系统设计与仿真 - 35
  • 提示词工程学习指南(专家级)- 上集