入口为:@EnableAspectJAutoProxy
注册了AnnotationAwareAspectJAutoProxyCreator extend AbstractAutoProxyCreator
本质上就是注册了一个BeanPostProcessor
AbstractAutoProxyCreator
postProcessBeforeInstantiation shouldSkip 解析创建 advisor
postProcessAfterInitialization wrapIfNecessary()
Object[] specificInterceptors = getAdvicesAndAdvisorsForBean(bean.getClass(), beanName, null); 遍历所有 advisor 并使用 pointcut 与当前 class 所有方法进行匹配 返回当前 class(所有方法) 关联的所有 advisor
使用这些 advisor 和 class 创建代理对象 proxyfactory 自动选择使用 jdk 还是 cglib
调用以cglib为例
核心类:CglibAopProxy
Callback aopInterceptor = new DynamicAdvisedInterceptor(this.advised);
将所有的 advisor 封装为一个 callback
DynamicAdvisedInterceptor#intercept()
List<Object> chain = this.advised.getInterceptorsAndDynamicInterceptionAdvice(method, targetClass); 此时 得到当前调用方法关联的 advisor
封装为调用链 递归调用 processd
retVal = new CglibMethodInvocation(proxy, target, method, args, targetClass, chain, methodProxy).proceed();