简单来说:Advice 是通知,Advisor 是增强器。(说了跟没说一样…)
使用 spring aop 要定义切面,切面里面有 通知 和 切点。
在项目启动的过程中,项目中的所有切面会被 AnnotationAwareAspectJAutoProxyCreator
解析,它会找到切面中的每一个通知以及通知对应的切点,拿这二者构建一个新的对象,这个对象就是 Advisor()
。最后将所有解析得到的增强器注入到容器中。
// 这是项目中增强器的类型
final class InstantiationModelAwarePointcutAdvisorImpl{
private final Pointcut pointcut; // 切点
private Advice instantiatedAdvice; // 通知
// 其他字段就不贴了。
}

在业务方法执行的时候,增强器会拦截它里面的切点命中的方法,最后在”恰当“的时候执行通知。