Spring AOP (6)总结篇

本文深入解析了Spring AOP的实现过程,从@EnableAspectJAutoProxy注解开始,阐述了如何开启AOP功能,AnnotationAwareAspectJAutoProxyCreator作为后置处理器的作用,以及在Bean的初始化过程中如何为组件创建代理对象。在代理对象执行目标方法时,详细介绍了拦截器链的执行顺序和通知方法的调用流程,帮助理解AOP在实际运行中的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结:

1、利用@EnableAspectJAutoProxy注解开启AOP功能;@EnableAspectJAutoProxy利用AspectJAutoProxyRegistrar.class给容器中注册一个组件:AnnotationAwareAspectJAutoProxyCreator;(保存组件的BeanDefinition信息)

他是一个后置处理器;

2:将AnnotationAwareAspectJAutoProxyCreator注册到BeanFactory,创建AnnotationAwareAspectJAutoProxyCreator对象;是通过调用registerBeanPostProcessors(beanFactory)实现的;它属于创建AnnotationConfigApplicationContext过程中调用的refesh();

AnnotationAwareAspectJAutoProxyCreator:该组件是一个后置处理器,它实现了

BeanPostProcessor接口、BeanFactoryAware接口;

3:初始化剩下的单实例Bean(例如演示代码中的MathCalculetor等);refresh()的另一个重要方法:finishBeanFactoryInitialization(beanFactory);组件创建完成,并为其创建代理对象;

        3.1)、创建业务逻辑组件、切面组件(MathCalculator、LogAspects);

        3.2)、后置处理器AnnotationAwareAspectJAutoProxyCreator会拦截以上两组件的创建过程;

        3.3)、组件创建完成,并为其创建代理对象,容器中拿到的组件就是代理对象(cglib增强后的对象),在执行方法时就由代理对象代理执行;

                3.3.1)判断组件是否需要增强(wrapIfNecessary()),若是,就把切面的通知方法包装成增强器(Advisor),给业务逻辑组件创建一个代理对象;

4:组件的代理对象创建完成后,执行目标方法:

        4.1)、代理对象执行目标方法:CglibAopProxy.intercept();

                拦截过程:

                 4.1.1)、得到目标方法的拦截器链(增强器包装成拦截器:MethodInterceptor);

                4.1.2)、利用拦截器的链式机制,依次进入每一个拦截器执行;

                4.1.3)、执行过程:

                        若目标方法正常执行:先执行前置通知--》目标方法--》后置通知--》返回通知;

                        若目标方法执行异常:先执行前置通知--》目标方法--》后置通知--》异常通知;

 

至此,AOP源码解读结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值