持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情
这篇文章我们来介绍一些PointCut。
PointCut 的概念
PointCut 中文常常翻译成“切点”。切点其实是和JointPoint 相辅相成的。
如果JoinPoint 是各个可执行Aspect 逻辑的“执行点”,那么PointCut 就是真正执行Aspect 逻辑的“切入执行点”。
换句话说,PointCut 存在的意义就是为系统指明Aspect 的逻辑的织入位置。
PointCut 的表述方式
我们明确知道了PointCut 的含义,也知道了它存在的意义,那我们就理所应当地需要考虑如何将这些内容表述为系统可以理解的方式。
目前针对PointCut 的表述方式大致分为以下几种:
- 直接去指定JointPoint 所在方法的名称
这种方式的表述方式比较简单,但是缺点就是功能单一。因为只限于支持某个单一方法级别的JointPoint,所以如果系统中有很多方法都需要支持织入这个Aspect 逻辑,那么就需要一个个去添加,这是很繁琐的。 - 使用正则表达式 \ 这是目前开发者使用最多的一种表述方式。通过正则表达式,可以匹配所有符合条件的JointPoint。在Spring 的AOP 中,开发者绝大多数都是使用这种方式来完成相关需求的开发。
- 使用特定语言来表述PointCut
这种表述方式功能十分强大,且十分灵活,可以高度按需定制。缺点就是使用起来比较复杂,同时需要准备解释器等。但是自从Spring 2.0 版本及之后,我们可以借助于AspectJ 的PointCut 表述语言解释器来指定PointCut。所以一些系统层面的内容就不需要我们考虑了。我们如果想使用这种方式,绝大多数精力应该放在这种特定语言的语法学习上。
总结
文章主要介绍了PointCut 的概念以及PointCut 的几种表述方式。重点放在概念性的介绍。