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织入:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值