2021.4.11
阅读《精通Spring4.x企业应用开发实战》一书做笔记
下图为本人理解的AOP术语韦恩图,由于引介跟增强在同一个位置,没在图上标出。
连接点(Joint Point)
由两个组成:
- 程序执行点
- 相对位置表示的方位
Test.foo方法执行前的连接点:
执行点为Test.foo(),方位是执行前的位置。
切点(Pointcut)
每个程序有多无数多的连接点,如果程序中有一个方法,那么连接点就有方法执行前,方法执行后,异常抛出时,方法调用前后这些连接点。
Spring中通过切点来定位特定的连接点。
连接点相当于数据库的记录,切点相当于查询条件。
所以,切点不是点,切点是查询条件。
SpringAOP通过切点来找点连接点中的执行点,注意是执行点,因为切点只定位在某个方向,而不会提供方位信息。
增强(Advice)
增强是一段代码,注意增强是代码。
并且advice不是同志的意思,应该翻译成enhancer可能会更好。
在Spring中,增强除了是一段代码之外,它还提供了方位信息,比如:
BeforeAdvice、AfterReturnAdvice、ThrowAdvice。
目标对象(Target)
目标对象就是被被代理类。
引介(Introduction)
引介是一种特殊的增强,它为类添加了一些属性和方法。
通过引介可以让被代理类实现一些接口。
织入(Weaving)
织入是一个动作,也可以说是一个过程。
就是将增强织入到被代理类连接点的过程。
织入分为三种类型:
- 编译期织入
- 类装载期织入
- 动态代理织入(Spring采取的做法)
代理(Proxy)
一个类被AOP织入增强之后,就会产生一个结果类。
其实动态代理的本质就是产生一个新的类,只是这个类由SpringAOP帮我们做了,对于我们来说是透明的。
切面(Aspect)
切面由两点组成:
- 切点
- 增强
既包含横切逻辑的定义,也包含连接点的定义。
SpringAOP的执行单位就是切面。
SpringAOP两大重点工作:
- 如何通过切点和增强定位某一个连接点
- 如何在增强中编写切面的代码。