源码地址:https://github.com/spring-projects/spring-framework
仓库地址:https://gitcode.net/qq_42665745/spring/-/tree/11-aop
AspectJ实现Aop
复习一下Aop的概念
- 切面(Aspect)
将横跨多个模块的功能(日志等)从业务逻辑中抽离出来,封装成一个类,为切面,@Aspect - 连接点(Join Point)
连接点是程序执行的特定点,也就是定义了执行通知的时机,@Before, @After - 切点(Pointcut)
通过表达式匹配哪些类或方法应用切面,@Pointcut - 通知(Advice)
通知定义了在切入点上执行的具体动作。通知有多种类型,如前置通知、后置通知、环绕通知等。 - 织入(Weaving)
织入是将切面应用到目标对象的过程。
流程:
1.封装AdvisedSupport 对象,包括目标对象,方法拦截器(自定义的功能),方法匹配器(AspectJ检查目标方法是否匹配)
2.使用JDK或Cglib创建代理对象,执行方法时,方法匹配器进行判断,拦截符合表达式的方法,如果是要被拦截的方法,执行方法拦截器中的自定义的功能,再反射执行原方法;如果否,直接反射执行原方法