1. SpringBoot 中代理对象的创建者

Spring 是基于动态代理实现的 aop,其核心在于代理类增强目标类的功能。这样对于每一个目标类,如何创建其代理对象就极为关键。从源码来看,Spring 中代理对象的创建都离不开AnnotationAwareAspectJAutoProxyCreator,这个类继承了 BeanPostProcessor,会在每个bean实例创建时检查该bean是否需要创建代理,需要的话就创建相应的代理

  • 基于 SpringBoot 的自动配置机制,在注解 @EnableAspectJAutoProxy 的定义中会通过 @Import(AspectJAutoProxyRegistrar.class) 将注册类引入,而在 AspectJAutoProxyRegistrar 的注册 bean 定义方法中会通过代码AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary() 最终将 AnnotationAwareAspectJAutoProxyCreator 注册到容器中

AnnotationAwareAspectJAutoProxyCreator 的继承结构如下:

Spring AOP 创建代理对象流程

2. 代理对象创建流程

Spring AOP 创建代理对象流程

相关文章: