1. SpringBoot 中代理对象的创建者
Spring 是基于动态代理实现的 aop,其核心在于代理类增强目标类的功能。这样对于每一个目标类,如何创建其代理对象就极为关键。从源码来看,Spring 中代理对象的创建都离不开AnnotationAwareAspectJAutoProxyCreator,这个类继承了 BeanPostProcessor,会在每个bean实例创建时检查该bean是否需要创建代理,需要的话就创建相应的代理
- 基于 SpringBoot 的自动配置机制,在注解
@EnableAspectJAutoProxy的定义中会通过@Import(AspectJAutoProxyRegistrar.class)将注册类引入,而在AspectJAutoProxyRegistrar的注册 bean 定义方法中会通过代码AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary()最终将AnnotationAwareAspectJAutoProxyCreator注册到容器中
AnnotationAwareAspectJAutoProxyCreator 的继承结构如下: