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织入:
织入实质上就是指创建代理并其作用的完整过程。
这个代理需要包含对应对象、对象对应的方法,方法对应的增强的逻辑,最终集齐要素后动态创建代理的这个过程就是织入。