文章目录
- 前言
- 一、探究AOP开始,判断导入的相关组件
- 1.跟踪源码流程
- 二、对切面中的增强方法进行增强
- 1.源码的过程
- 三、使用aop的目标类生成代理对象
- 总结
前言
Spring的两大特性:IOC;AOP。本篇仅以跟完Spring AOP相关源码为依据写的总结
一、探究AOP开始,判断导入的相关组件
对于Spring来说,大部分的整合其实就是在容器中导入相关组件,然后通过前置或者后置处理器去干预我们的相关流程。
1.跟踪源码流程
AOP导入的组件AnnotationAwareAspectJAutoProxyCreator
二、对切面中的增强方法进行增强
这里是通过反射获取对应切面类中的方法,ReflectionUtils.doWithMethods(aspectClass, methods::add, adviceMethodFilter);所有方法(包括obj的方法),判断那些是增强方法(通过注解来判断如@Before)
1.源码的过程
注意点:
- 反射工具可学习一下Spring的源码ReflectionUtils
- 切面和增强方法都会放在缓存池中(Map)Spring底层常用的就是缓存池
- 站在开发者的角度出发其实很多底层的思维都差不多,就是通过反射拿到切面类中的方法,然后通过遍历的方法来判断注解,判断是不是需要对方法进行增强
- 增强方法完成后,我们拿到代理对象,然后会将对应的增强器中的方法转化成对应的拦截器去实现AOP
三、使用aop的目标类生成代理对象
代理设计模式: