SourceAnalysis - 50 - Spring - AspectJ
这篇的目的也比较直接,今天突然发现同事问到切点表达式发现自己还是不太熟悉 AspectJ 的切点表达式,只知道最简单的 execution 表达式,所以来整理一下一些切点表达式的使用方法,算是插入的一篇文章吧。
首先对于一个切点 pointcut 来说,它分为两个核心部分,第一部分是 joinpoint,第二部分是 pointcut。而切点本身的作用是选择需要被横切的逻辑块,而 before / after 等是 advice 建议类型。
Spring AOP 支持的 joinpoint 大致如下。
execution:用于匹配方法执行的连接点;
within:用于匹配指定类型内的方法执行;
this:用于匹配当前AOP代理对象类型的执行方法;
target:用于匹配当前目标对象类型的执行方法;
args:用于匹配当前执行的方法传入的参数为指定类型的执行方法;
@within:用于匹配所以持有指定注解类型内的方法;
@target:用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;
@args:用于匹配当前执行的方法传入的参数持有指定注解的执行;
@annotation:用于匹配当前执行方法持有指定注解的方法;
bean:Spring AOP扩展,用于匹配特定名称的Bean对象的执行方法;
然后是 pointcut 可以通过 and(&&) or(||) not(!)组合,这也没什么好说的。
通过这些 joinpoint 的组合可以达到意想不到的效果,以前通过 execution 注解指定然后再切面内进行过滤的方式也就可以过时了,最后给出源码。
时间: 2024-10-31 12:30:00