欢迎访问宙启技术站
智能推送

Spring Aop 切点表达式

发布时间:2023-05-17 07:56:58

Spring Aop 切点表达式是 Spring Aop 框架中的一个重要的概念,它用于定义一个匹配切入点的规则,可以让开发者在 Aop 拦截时精准的选择目标方法或者目标类。

Spring Aop 切点表达式并不是一种编程语言,而是一系列规则组成的表达式,用来描述需要被拦截的方法或者类。

Spring Aop 支持多种表达式用于定义切点,以下是常见的表达式:

1. execution

这是一种最常用的切点表达式,用于匹配方法的执行,其语法形式如下:

execution(modifiers-pattern? return-type-pattern declaring-type-pattern? method-name-pattern(param-pattern) throws-pattern?)

其中,? 表示可选。各个元素解释如下:

- modifiers-pattern 表示方法的修饰符,比如 public、private 等。

- return-type-pattern 表示方法的返回类型,可以使用通配符。

- declaring-type-pattern 表示方法所属的类或者接口,可以使用通配符。

- method-name-pattern 表示方法的名称,可以使用通配符。

- param-pattern 表示方法的参数列表,可以使用通配符。

- throws-pattern 表示方法可能抛出的异常,可以使用通配符。

例如,下面的表达式表示匹配 MyService 类的所有 public 方法:

    execution(public * com.example.MyService.*(..))

2. within

这种切点表达式用于匹配特定的类或者包,其语法形式如下:

within(type-pattern)

其中,type-pattern 表示需要匹配的类或者包。例如,下面的表达式表示匹配 com.example 包及其子包中的所有类:

    within(com.example..*)

3. this/target

这两种切点表达式用于匹配某个特定类型的 bean 或者它的子类,其语法形式如下:

this(type-pattern)

target(type-pattern)

其中,type-pattern 表示需要匹配的 bean 类型。例如,下面的表达式表示匹配所有实现了 MyInterface 接口的 bean:

    this(com.example.MyInterface)

    target(com.example.MyInterface)

4. args

这种切点表达式用于匹配某个特定参数类型的方法,其语法形式如下:

args(type-pattern)

其中,type-pattern 表示需要匹配的参数类型。例如,下面的表达式表示匹配所有参数列表中包含 String 类型的方法:

    execution(* *(String, ..))

5. @annotation

这种切点表达式用于匹配某个特定注解的方法,其语法形式如下:

@annotation(type-pattern)

其中,type-pattern 表示需要匹配的注解类型。例如,下面的表达式表示匹配所有标记了 @MyAnnotation 注解的方法:

    @annotation(com.example.MyAnnotation)

6. bean

这种切点表达式用于匹配某个特定名称的 bean,其语法形式如下:

bean(name-pattern)

其中,name-pattern 表示需要匹配的 bean 名称。例如,下面的表达式表示匹配名为 userService 的 bean:

    bean(userService)

总结:

Spring Aop 切点表达式是一种用于定义 Aop 切入点的规则,通过这些规则可以精确的选择目标方法或目标类进行拦截。Spring Aop 支持多种切点表达式,包括 execution、within、this/target、args、@annotation 和 bean 等。在实际开发中,应根据具体场景选择适当的切点表达式。