1.切面(Aspects)常常通过通知(advice)、切点(pointcuts)和织入点(join points)来描述
2.通知(advice)有5种
- Before——前置通知,在调用目标方法之前执行通知定义的任务;
- After——后置通知,在目标方法执行结束后,无论执行结果如何都执行通知定义的任务;
- After-returning——后置通知,在目标方法执行结束后,如果执行成功,则执行通知定义的任务;
- After-throwing——异常通知,如果目标方法执行过程中抛出异常,则执行通知定义的任务;
- Around——环绕通知,在目标方法执行前和执行后,都需要执行通知定义的任务。
3.织入点
在应用中可能有很多个机会可以应用通知,这些机会就叫做织入点。
织入点可能是正在调用的方法、正在抛出的异常或者是正在被修改的属性。
4.切点
如果说通知是定义了切面的what和when这两个方面,那么切点就定义了where。切点指定一个或者多个织入点,而通知可以通过切点接入。通常情况下可以使用明确的类名和函数名或者定义了匹配模式的正则表达式来定义切点;还有一些AOP框架支持定义动态切点(dynamic pointcuts),可以在运行时根据函数参数值决定是否应用通知。
INTRODUCTIONS
你可以通过introduction给现有的类增加方法或者属性。例如,可以定义一个通知类Auditable,用于保存某个对象被修改前的上一个状态——定义一个局部变量来保存这个状态,然后使用setLastModified(Date)方法设置状态。类似于设计模式中的装饰者模式——在不改变现有类的基础上为之增加属性和方法。