这次来分析下切面的执行过程。
1.怎么看?
怎么开始看源码呢?就直接从被增强的方法调用那里打断点,看看怎么执行的:
然后就来到了这:
2.初步分析
里面有段:
if (this.advised.exposeProxy) {
// Make invocation available if necessary.
oldProxy = AopContext.setCurrentProxy(proxy);
setProxyContext = true;
}
就是上篇文章讲到的注解配置暴露代理对象,放到AopContext的ThreadLocal里去,之后就可以随时用 AopContext.currentProxy())取到代理对象。
接下来有段重要的:
List<Object> chain = this.advised.getInterceptorsAndDynamicInterceptionAdvice(method, targetClass);
获取拦截器链,就是把这次相关的增强器转化成拦截器获取出