Spring注解--AOP原理(一):整体流程

1. 添加@EnableAspectJAutoProxy注解,开启AOP

2. 在容器中引入 AnnotationAwareAspectJAutoProxyCreator

@Import(AspectJAutoProxyRegistrar.class)
public @interface EnableAspectJAutoProxy {...}

public static BeanDefinition registerAspectJAnnotationAutoProxyCreatorIfNecessary(BeanDefinitionRegistry registry, Object source) {
        return registerOrEscalateApcAsRequired(AnnotationAwareAspectJAutoProxyCreator.class, registry, source);
    }

更多AnnotationAwareAspectJAutoProxyCreator的信息,请参考Spring注解--AOP原理(二):AnnotationAwareAspectJAutoProxyCreator

3. 容器的创建与初始化(AbstractApplicationContext)

@Override
public void refresh() throws BeansException, IllegalStateException {
...
//注册BeanPostProcessor
registerBeanPostProcessors(beanFactory);
...
//注册业务bean或者其代理对象
finishBeanFactoryInitialization(beanFactory);
}
  • BeanPostProcessor 的创建与注册。请参考Spring注解--AOP原理(三):BeanPostProcessor创建与注册
  • 初始化剩下的bean(创建业务bean, 拦截组件,代理对象...)。请参考Spring注解--AOP原理(四):业务bean与代理bean的创建

4. 执行业务方法

  • 从容器中获取代理对象
  • 执行代理对象方法:请参考Spring注解--AOP原理(五):代理对象目标方法的执行

你可能感兴趣的:(Spring注解--AOP原理(一):整体流程)