理解了JDK,CGLIB动态代理技术,以及ProxyFactory后,不难理解Spring实现AOP就是扫描AOP配置后生成相应的代理类,按切点(pointcut)和通知器(advisor)配置来织入通知(advice)来实现AOP。核心是动态代理技术。
具体看看,先看看@EnableAspectJAutoProxy:
进入AspectJAutoProxyRegistrar:
读注释,可以看出这个类用于注册一个AnnotationAwareAspectJAutoProxyCreator到Spring容器中,进入AnnotationAwareAspectJAutoProxyCreator的基类AbstractAutoProxyCreator的postProcessAfterInitialization方法中,可见AnnotationAwareAspectJAutoProxyCreator是一个BeanPostProcessor,通过对Bean进行后处理实现用代理替换本身的Bean:
追踪wrapIfNecessary(bean, beanName, cacheKey)方法,最终可以到createProxy方法中:
了解ProxyFactory的原理后,这段代码不难理解,就是根据注释解析出Advisor,然后生成对应代理类。