看到《Spring实战》第四版第四章时,对连接点和切点的概念很不理解,多方查阅,理解如下:
在区别连接点和切点之前,先了解什么是通知(advice)
通知(advice):
通知就是指你想要干什么(what)
比如说大家应该都玩过鹅厂的游戏吧,在游戏(端游)启动之前,我记得是有个TP安全组件会启动,那么这个TP可以看做一个通知(一个前置通知:游戏启动之前执行)
Spring切面支持的五种通知:
- 前置通知:目标方法执行前调用
- 后置通知:目标方法完成后调用
- 返回通知:目标方法成功执行后调用
- 异常通知:目标方法抛出异常时调用
- 环绕通知:包裹了目标方法,也就是目标方法执行前后都会调用该通知
连接点(Join point):
程序执行时任何能捕捉到的行为,都是连接点。
比如说程序调用了一个方法,你可以捕捉到这个行为,然后你就可以把通知放到这个行为前、后、环绕、异常时等等。
切点(Pointcut):
我觉得,切点就是一个正在使用的连接点而已。我找到这个连接点,并为其放置了通知,那么这个连接点此时就是一个切点。
切面(Aspect):
通知+切点 == 切面
我决定在程序(应用)的这个行为(选中的连接点==切点)前或后或其他时间干(通知)一些事情(通知的内容),这就是一个切面
以游戏启动到结束的过程为例:
连接点:游戏启动、登录(或注册)、匹配对局、游戏中战绩的任何变化、游戏结束、重新开始(或退出登录)等等行为,都是连接点。
eg:
如果我要在游戏启动之前在屏幕上打印“游戏有害健康,禁止未成年人沉迷游戏”,那么此时,打印“…”就是一个前置通知,游戏启动为切点,在游戏启动前打印“…”就是一个切面。