aop切点表达式

发布时间 2023-05-08 23:15:40作者: 方方面
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?)

 其中,括号中的每个部分都表示一个限制条件,它们可以组合在一起,用于精确选定匹配的方法。具体参数说明如下:

  1. modifiers-pattern(可选):方法的修饰符,如 public、protected、private、static、final 等等。其中,* 表示任意修饰符,可以省略不写。
  2. ret-type-pattern:返回值类型模式,如 java.lang.String、java.util.* 等等。
  3. declaring-type-pattern(可选):类或接口的全路径名,如 java.lang.String、java.util.AbstractList 等等。其中,* 表示任何类或接口,可以省略不写。
  4. name-pattern:方法名,如 equals、hashCode、* 等等,* 表示匹配所有方法。
  5. param-pattern:方法的参数列表,如 (java.lang.String, int) 表示匹配一个带有一个 String 型和一个 int 型参数的方法。注:"(..)":匹配任意数量任意类型的参数,"()":匹配一个任意类型的参数,"(, String)":匹配两个参数,第一个任意类型,第二个是 String 类型,"(String, ..)":匹配至少一个参数,第一个参数是 String 类型。
  6. throws-pattern(可选):方法声明抛出的异常列表,如 java.lang.NullPointerException、java.lang.Exception 等等。

 例如:

  • execution(public * *(..)) 匹配所有 public 访问权限,任意返回类型,任意类或接口,方法名任意,任意参数的方法。
  • execution(* com.example.demo..(..)) 匹配 com.example.demo 包下的所有方法。
  • execution(* com.example.demo...(..)) 匹配 com.example.demo 包及其子包下的所有方法。
  • execution(String com.example.demo.UserService.getName(String)) 匹配 UserService 类中名为 getName,参数为一个 String 类型的方法,且其返回值必须为 String 类型。