AOP一次请求调用全流程

本文介绍了Spring AOP的实现原理。@EnableAspectJAutoProxy会向容器注册配置类并注入AspectJAnnotationAutoProxyCreator,它实现了后置处理器和相关接口。Bean初始化后会触发其方法查找切面类、创建增强器并创建AOP代理。调用代理方法时,通过责任链执行增强器和被代理方法。

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

①在aop注解中@EnableAspectJAutoProxy,会通过@import向spring容器注册一个配置类,在配置类中想容器注入了一个AspectJAnnotationAutoProxyCreator这个类,这个是aop的核心,这个类实现了实现了BeanPostProcessor后置处理器,在Bean初始化完成前后做事情。还实现了BeanFactoryAware接口,做了两件事:1.把Beanfactory保存到AnnotationAwareAspectJAutoProxyCreator 组件上.2.: 为AnnotationAwareAspectJAutoProxyCreator 的aspectJAdvisorsBuilder aspect增强器构建器赋值
到这大概可以猜测是向容器中注入AspectJAnnotationAutoProxyCreator后,当Bean对象创建后会被AspectJAnnotationAutoProxyCreator所增强,也就是实现该Bean的代理。
②当我们的bean初始化完毕后,会触发所有的BeanPostProcessor的postProcessAfterInitialization 方法,此时就会调用我们的 AnnotationAwareAspectJAutoProxyCreator 的 postProcessAfterInitialization 方法。该方法会查找我们定义的切面类(使用 @Aspect 注解),创建切面类中定义的增强器(使用 @Before、@After、@Around 等注解),并根据 @Pointcut 的 execution 表达式筛选出适用于当前遍历的 bean 的增强器, 将适用于当前遍历的 bean 的增强器作为参数之一创建对应的 AOP 代理。
3)当调用到被 AOP 代理的方法时,会走到对应的代理方法:JdkDynamicAopProxy#invoke 或 DynamicAdvisedInterceptor#intercept,该方法会创建 ReflectiveMethodInvocation,通过责任链的方式来执行所有的增强器和被代理的方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值