Spring源码学习⑧-AOP(原理)

2019-04-21  本文已影响0人  曾慧婷

1、利用注解@EnableAspectJAutoProxy开启AOP功能。

2、注解@EnableAspectJAutoProxy会给容器注册一个组件AnnotationAwareAspectJAutoProxyCreator

3、AnnotationAwareAspectJAutoProxyCreator是一个后置处理器

4、利用容器创建的流程:

        1)、通过registerBeanPostProcessors(beanFactory);注册后置处理器,创建AnnotationAwareAspectJAutoProxyCreator

        2)、通过finishBeanFactoryInitialization(beanFactory);创建剩下的单实例bean

                1)、创建业务逻辑类和切面类组件

                2)、AnnotationAwareAspectJAutoProxyCreator会拦截上述组件的创建过程

                3)、也就是在组件创建完之后,会判断组件是否需要增强

                            是:会将切面类的通知方法包装成增强器(Advisor),然后给业务逻辑组件创建一个动态代理对象(cglib动态代理对象)

5、执行目标方法

        1)、代理对象执行目标方法

        2)、通过CglibAopProxy.intercept()来拦截

                1)、获取目标方法的拦截器链(也就是将增强器包装成的MethodInterceptor拦截器)

                2)、利用拦截器的链式机制,依次进入每一个拦截器进行执行。如下图:                            

                3)、执行效果:

                        正常执行:前置通知->目标方法->后置通知->返回通知

                        异常执行:前置通知->目标方法->后置通知->异常通知

上一篇下一篇

猜你喜欢

热点阅读