美文网首页
Spring源码学习⑧-AOP(原理)

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

作者: 曾慧婷 | 来源:发表于2019-04-21 20:18 被阅读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)、执行效果:

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

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

    相关文章

      网友评论

          本文标题:Spring源码学习⑧-AOP(原理)

          本文链接:https://www.haomeiwen.com/subject/bdhrgqtx.html