前言
往期文章:
- Spring IoC - Spring IoC 的设计
- Spring IoC - IoC 容器初始化 源码解析
- Spring IoC - 依赖注入 源码解析
- 向您生动地讲解Spring AOP 源码(1)
在上一章向您生动地讲解Spring AOP 源码(1)中,作者介绍了【开启AOP自动代理的玄机】和【自动代理的触发时机】。
在本章中,作者会向您介绍,Spring AOP 是如何解析我们配置的Aspect,生成 Advisors 链的?
闲话不多说,让我们直接开始。
获取对应 Bean 适配的Advisors 链
获取对应 Bean 适配的 Advisors 链,分为两步。
- 获取容器所有的 advisors 作为候选,即解析Spring 容器中所有 Aspect 类中的 advice 方法,包装成 advisor;
- 从候选的 Advisors 中筛选出适配当前 Bean的 Advisors 链;
未免读者阅读不连贯,我们重新贴一下上篇文章中我们最后讲解的一段源码,由此继续往下讲述。
源码位置:AbstractAutoProxyCreator#wrapIfNecessary(..)
源码位置:AspectJAwareAdvisorAutoProxyCreator#shouldSkip(..)
源码位置:AbstractAdvisorAutoProxyCreator#getAdvicesAndAdvisorsForBean(..)
、AbstractAdvisorAutoProxyCreator#findEligibleAdvisors(..)
可以看到两个方法都调用了findCandidateAdvisors()
方法,也就是去获取候选的 Advisors,我们进去看看里面干了什么。