如何在一个切入点表达式中匹配两个模式

How to match two patterns in one pointcut expression

我想定义我的切入点以匹配两种方法:

  1. class org.mypackage.Foo 中名称以“更新”开头的所有方法
  2. 同一个 class 中名称以“delete”开头的所有方法

我尝试了以下方法:

@Before("execution (* org.mypackage.Foo.update*(..) ) && execution(* org.mypackage.Foo.delete*(..) )")
public void verify()
{
  //verify if user has permission to modify...
}

没用。当我调用 Foo.update*() 方法或 Foo.delete*() 方法时,不会调用 verify()。

我该如何更改?

将表达式中的 && 更改为 ||

有 2 个选项可以匹配切入点表达式中的模式。切入点表达式可以是对命名切入点的简单引用,也可以是就地声明的切入点表达式。

  1. 通过为各个切点创建单独的方法。并在@Before 建议中使用该方法名称作为参考。
    @Pointcut("execution(* org.mypackage.Foo.update*(..))")
    private void fooUpdate() {}
    
    @Pointcut("execution(* org.mypackage.Foo.delete*(..))")
    private void fooDelete() {}
    
    @Before("fooUpdate() || fooDelete()")
    public void verify() {
      // verify if user has permission to modify...
    }
  1. 直接声明切入点表达式。
    @Before("execution(* org.mypackage.Foo.update*(..)) || execution(* org.mypackage.Foo.delete*(..))")
    public void verify() {
      // verify if user has permission to modify...
    }