Spring注解--AOP原理(一):整体流程
2019-01-08 本文已影响0人
aix91
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原理(五):代理对象目标方法的执行