spring-aop

aop 先标记你要不要代理,然后bean初始化后开始搞事(循环依赖也可能做),把这个增强bean指定的切面东西全部出来了,就是那些注解的方法,然后根据前置 后置 后置返回 环绕通知 取出来他们几个,然后排序
默认 给了一个作为下标0也就是第一个try。下标1是异常通知第二个try,下标2是前置通知但是也是在try里面的还做了取返回值为了给下标3使用同时这个try的finally里面执行后置通知下标3返回通知

  • 开启注解
    在这里插入图片描述

  • @Import AspectJAutoProxyRegistrar 实现了ImportBeanDefinitionRegistrar,会在spring的invokeBeanFactoryPostProcessors中执行ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry中parser.parse解析注解后,在this.reader.loadBeanDefinitions(configClasses)中执行AspectJAutoProxyRegistrar#registerBeanDefinitions然后注册AnnotationAwareAspectJAutoProxyCreator的后置处理器(用于处理当前应用程序上下文中的所有AspectJ注释方面以及Spring Advisor<包含Pointcut(切入点)和Advice(连接的代码)>)解析出所有的advice并保存

在这里插入图片描述
在这里插入图片描述

  1. 在第一次后置处理器标记是否需要aop getBean->doGetBean->createBean->resolveBeforeInstantiation#applyBeanPostProcessorsBeforeInstantiation#postProcessBeforeInstantiation#(AbstractAutoProxyCreator)shouldSkip,判断当前类是否是切面、advice、pointcut、advisor;
    在这里插入图片描述
  2. 判断@Aspect是否被解析,如果没有被解析,从容器中拿到所有类型为Object的beanName,遍历所有的beanName解析出被@Aspect标记的类,提取Aspect类中所有的Advice方法,将提取结果加入缓存
    在这里插入图片描述
    在这里插入图片描述
  • 创建代理 getBean->doGetBean->createBean->doCreateBean->initializeBean->applyBeanPostProcessorsAfterInitialization#postProcessAfterInitialization
    1. 获取advisors,创建代理之前首先要判断当前bean是否满足被代理, 所以需要将advisor从之前的缓存中拿出来和当前bean 根据表达式进行匹配,在判断该类是否需要做aop时已经存入缓存中,现在从缓存中获取就可以。
      在这里插入图片描述
    2. 与当前类匹配根据advisors和当前的bean根据切点表达式进行匹配,看是否符合。getAdvicesAndAdvisorsForBean->findEligibleAdvisors->findAdvisorsThatCanApply->canApply->做粗筛->精筛 还做了一个排序
      在这里插入图片描述
      排序
      在这里插入图片描述
  1. 创建代理:找到了 和当前Bean匹配的advisor说明满足创建动态代理的条件
    在这里插入图片描述
    在这里插入图片描述
  • 代理类调用,是责任链一层套一层的调用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值