AOP中常用的术语

毕业很久没碰过spring的小白一下子尝试手写Aop,有点牵强,对于许多术语还是半知半解,网上查看博客没能理解的很好,想起《Spring Action》这本书,不得不说老外写的东西确实可爱,又是骑士又是恶龙少女的,又是查水表,额不,查电表的。

而aop这部分的术语,作者结合当时的天气非常生动的解释了各个术语的内在含义。

简单摘抄并总结下 4.1.1定义AOP术语

听说图片能够在脑海中能“存活”更久

在这里插入图片描述
在这里插入图片描述
在一个或多个连接点上,可以把切面的功能(通知)织入到程序的执行过程中。

查水表(请不要纠正我,顽皮)

这是一个电表员抄电表的故事

切面(Aspect)

抄表员要做的事情(抄表)和自己需要抄表的房间号(并不是所有的房间都给分配给一个小伙,也不是所有的房间都需要抄表)

切面是通知和切点的结合。通知和切点共同定义了切面的全部内容–他是什么,在何时何处完成功能。

总结:
切面=通知+切点
作用:
什么+何时(通知),何处(切点)完成功能

通知(Advice)

抄表员的主要就是记录电量,当然他还有其他的职责,但记录电量是他必须要完成的工作。
切面中必须完成的工作就是–通知

总结:
作用:
切面的工作是什么、何时使用(调用方法之前?之后?抛出异常时?)

连接点(Join point)

这个对于我来说还是比较难理解的,书中的例子是:
抄表员可能需要为多个住户进行拆表,甚至整个城市的住户,所以每家都是潜在目标。针对于到了某一个住户家里的时候,抄表员有眼睛,所以他除了能抄电表,还能抄水表,但是他的工作是抄电表。

这里每个住户理解为一个方法,每个住户家里的水表和电表理解为时机。

类中有许多的方法,而这个方法有很多的“时机”(方法被调用的时候,抛出异常的时候,甚至修改一个字段的时候),而在这些“时机”里面能够插入通知 就是连接点。
还是有点羞涩难懂。
书中说的时机我不知道可不可以理解为之前?之后?

总结:
类中的所有方法的所有时机(也就是书中说的,调用方法时,抛出异常时,甚至修改一个字段时。)

这样是不是就能说通了?在某个连接点(假如A()被调用的时候),在这个连接点之前?之后?之前和之后?插入通知。

这是我个人的理解,之前查阅网上的博客,大多是说所有的方法,我的理解可能不是特别准确,如果存在问题,还望不吝指出,多谢!

切点(Pointcut)

如果让抄表员查一个城市的住户未免天方夜谭,时机情况往往是服务于某一个社区,或者某一家欠费了专门去他家上门服务。

切面也不需要应用于所有的连接点,切点有助于缩小切面所通知的连接点的范围。说白了切面就是一个或多个连接点,通过明确类名方法名或者正则的方式指定这些切点。

总结:
何处进行通知
连接点的子集

引入(Introduction)

引入允许向现有的类中添加新的方法或属性,例如,我们可以创建一个Additable通知类,该类记录了对下你给最后一次修改时的状态。这很简单只需要一个方法,setLastModified(Date),和一个实例变量来保存这个状态。然后,这个新方法和实例变量就可以被引入到现有的类中,从而可以在无需修改这些现有的类的情况下,让他们具有新的行为和状态。

总结:引入类

织入(Weaving)

织入是把切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。在目标对象生的生命周期里有多个点可以进行织入:

编译期: AspectJ是这种方式
类加载期:AspectJ5是这种方式
运行期:SpringAOP是这种方式

总结:引入方法

引入和织入的区别?一个引入类,一个引入方法。

总结

通知包含了需要用于多个应用对象的横切行为
连接点是程序执行过程中能够应用通知的所有的
切点定义了通知被应用的具体位置(在那些连接点)
其中关键的概念是:切点定义了那些连接点会得到通知。

发布了529 篇原创文章 · 获赞 2862 · 访问量 240万+

猜你喜欢

转载自blog.csdn.net/dataiyangu/article/details/104684641
今日推荐