import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class MyDemoLogginAspect {

    @Before("execution(* * add*())")
    public void beforeAddAccountAdvice(){

        System.out.println("Executing before");

    }
}


我因以下原因而获得例外:

 java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting '(' at character position 14
execution(* * add*())


我需要知道为什么上面的切入点表达式是错误的?

注意:此错误是在执行主类后出现的,但是主类没有任何问题,而是在切入点表达式中

最佳答案

切入点表达式不正确。

documentation

执行表达式的格式为:

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


适用于您的示例的正确格式是

@Before("execution(* add*())")


Modifys-pattern是可选的,不能为通配符(*),并且应为public或protected之一。详细信息here

所以切入点表达式也可能是

@Before("execution(public * add*())")


还要注意,切入点表达式过于笼统,可能会导致不希望的结果,因为kriegaex在此answer中指出了另一个SO问题

关于java - 异常:java.lang.IllegalArgumentException:切入点格式不正确错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59695857/

10-10 08:44