一、注册AnnotationAwareAspectJAutoProxyCreator,引入postProcessAfterInitialization
1、Spring 入口:
<aop:aspectj-autoproxy /> 
registerAspectJAnnotationAutoProxyCreatorIfNecessary,注册AnnotationAwareAspectJAutoProxyCreator

AnnotationAwareAspectJAutoProxyCreator类的层次结构

AnnotationAwareAspectJAutoProxyCreator实现了BeanPostProcessor接口,而实现BeanPostProcessor后,当Spring加载这个Bean时会在实例化前调用其postProcessAfterInitialization
2、SpringBoot 入口:
@EnableAspectJAutoProxy 
AspectJAutoProxyRegister
在AspectJAutoProxyRegister中,实际上就是将AspectJAnnotationAutoProxyCreator的BeanDefinition注册到IoC 容器当中
(AnnotationAwareAspectJAutoProxyCreator继承AspectJAnnotationAutoProxyCreator,
AspectJAnnotationAutoProxyCreator继承AbstractAutoProxyCreator)
而AspectJAnnotationAutoProxyCreator是一个BeanPostProcessor,在实例化前调用其postProcessAfterInitialization,postProcessAfterInitialization会执行创建代理类的操作
二、创建代理
1、获取增强器
2、寻找匹配增强器
3、创建代理
(1)判断是采用JDK动态代理还是CGLIB动态代理
(2)以JDK动态代理为例,调用invoke方法,此方法维护一个计数器,记录调用链的当前位置
此部分源码解析可参考:Spring源码深度解析第2版

有关这3个部分的介绍抽丝剥茧,极为详细,不赘述。
另有参考博客:
向您图文并茂生动讲解Spring AOP 源码(1) - 掘金
向您图文并茂生动讲解Spring AOP 源码(2) - 掘金
向您生动地讲解Spring AOP 源码(3) - 掘金
感兴趣的读者可参考阅读
补充:
SpringBoot中,引入AOP依赖包后,一般来说并不需要去做其他配置,使用过Spring注解配置方式的人会问是否需要在程序主类中增加@EnableAspectJAutoProxy来启用,实际并不需要。
因为在AOP的默认配置属性中,spring.aop.auto属性默认是开启的,也就是说只要引入了AOP依赖后,默认已经增加了@EnableAspectJAutoProxy
advisor 可以就看成 pointcut + advise的一个组合对象














![[C#]OpenCvSharp实现直方图均衡化全局直方图局部直方图自适应直方图](https://img-blog.csdnimg.cn/direct/4d493560555045e0941173d87b5e4fe9.png)




