程序员小猿开发笔记,希望大家共同进步。 与大多数技术一样,AOP已经形成了自己的术语。
描述切面的常用术 语有通知 (advice ) 、切点 (pointcut) 和连接点 (join point) 。
各位小猿,我们可以用一句话来概括各个元素之间的关系“把切面的功能(通知)织入到程序的执行过程中。
图4 .2 在一个或多个连接点上,
通知 (Advice )
当抄表员出现在我们家门口时,他们要登记用电量并回去向电力公司报告。显然,他们必须有一份需要抄表的住户清单,他们所汇报的信息也很重要,但记录用电量才是抄表员的主要工作。
类似地,切面也有目标——它必须要完成的工作。在AOP术语中,切面的工作被称为通知。
Spring切面可以应用5种类型的通知:
连接点 (Join point)
电力公司为多个住户提供服务,甚至可能是整个城市。每家都有一个 电表,这些电表上的数字都需要读取,因此每家都是抄表员的潜在目标。抄表员也许能够读取各种类型的设备,但是为了完成他的工作, 他的目标应该房屋内所安装的电表。
同样,我们的应用可能也有数以千计的时机应用通知。
这些时机被称为连接点。
切点 (Poincut)
如果让一位抄表员访问电力公司所服务的所有住户,那肯定是不现实 的。实际上,电力公司为每一个抄表员都分别指定某一块区域的住 户。
类似地,一个切面并不需要通知应用的所有连接点。切点有助于缩小切面所通知的连接点的范围。
如果说通知定义了切面的“什么”和“何时”的话,那么切点就定义 了“何处” 。
有些AOP框架允许我们创建动态的切点,可以根据运行时的决策 (比如方法的参数值) 来决定是否应用通 知。
切面 (Aspect)
当抄表员开始一天的工作时,他知道自己要做的事情 (报告用电量) 和从哪些房屋收集信息。因此,他知道要完成工作所需要的一切东西。
切面是通知和切点的结合。通知和切点共同定义了切面的全部内容
——它是什么,在何时和何处完成其功能。
引入 (Introduction)
引入允许我们向现有的类添加新方法或属性。
例如,我们可以创建一 个Auditable通知类,该类记录了对象最后一次修改时的状态。这 很简单,只需一个方法,setLastModified (Date),和一个实例变量来保存这个状态。然后,这个新方法和实例变量就可以被引入到现有的类中,从而可以在无需修改这些现有的类的情况下,让它们具有新的行为和状态。
织入 (Weaving)
织入是把切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。
我们已经了解了一些基础的AOP术语,现在让我们再看看这些AOP的 核心概念是如何在Spring中实现的。