①在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,通过责任链的方式来执行所有的增强器和被代理的方法。
AOP一次请求调用全流程
最新推荐文章于 2025-06-04 17:02:42 发布