在注解开发的模式下AOP由注解@EnableAspectJAutoProxy实现
而AOP导入的组件是(AspectJAutoProxyRegistrar.class)
这个类继承了ImportBeanDefinitionRegistrar(导入bean定义注册器)
总结
-
@EnableAspectJAutoProxy 开启AOP功能。这个注解会给容器中注册一个组件AnntationAwareAspectJProxyCreator(一种后置处理器)
-
AnntationAwareAspectJProxyCreator创建流程:
创建容器,调用容器的registerBeanPostProcessors()方法注册后置处理器;创建 AnntationAwareAspectJProxyCreator对象。
finishBeanFactoryInitialization()初始化剩下的单实例非懒汉式bean
创建业务逻辑组件和切面组件
AnntationAwareAspectJProxyCreator拦截创建过程
组件创建完成之后 判断组件是否需要增强
如果需要 将切面的通知方法包装成增强器(Advisor)给业务逻辑组件创建一个代理对象 -
List item执行目标方法
代理对象执行目标方法
CglibAopProxy.intercept()进行蓝杰
得到目标方法的拦截器链(增强器包装成拦截器MethodInterceptor)
利用拦截器的链式机制,依次进入拦截器进行执行
前置通知(最后加载)-》目标方法-》后置通知-》(正常执行)返回通知
-》(异常)异常通知