我试图定义一个可以匹配类中所有方法的切入点,但它不起作用。 我尽力找出原因。 我最终找到了我定义的切入点表达式的故障点。Pointcut表达式中两个连续的星号是什么意思?
以下是我首先定义的开始。 (不工作)
@Pointcut("execution(** membership.data.MemberRepository.*(..))")
正如我已经知道,在连续两个星号“执行(**”是指任何访问修饰符和任何返回类型,但它永远不会匹配具有某种返回类型的一些方法像这样:
public List<MemberVO> findByName(String name) { ...
在另一方面,它匹配另一个是这样的:
public String print(String str) { ...
而下面的定义它的正确方法,我发现了开始时这些比赛。上述两种方法签名并且正常工作。
@Pointcut("execution(public * membership.data.MemberRepository.*(..))")
@Pointcut("execution(* membership.data.MemberRepository.*(..))")
我错过了什么?我努力寻找答案,但从未出现过。 请让我知道的确切含义“执行(**”
增加:纵横类
@Aspect
public class PerformanceLogger {
@Pointcut("execution(* membership.data.MemberRepository.*(..))")
public void performance() {}
@Around("performance()")
public Object watchPerformance(ProceedingJoinPoint jp) {
try {
long st = System.nanoTime();
Object obj = jp.proceed();
System.out.println(jp.toShortString() + " called :" + (System.nanoTime() - st));
return obj;
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
}
也许两个'*'之间有空格? – Andreas
@Andreas我试图在两者之间放置一个空格,如下所示:“execution(* * ..”,并且在初始化具有切入点表达式的aspect bean时引发异常 – ParkCheolu
为什么你不能共享完整的切入点和方法签名?这样你就不会得到有意义的答案。请学习[如何提出问题](http://stackoverflow.com/help/how-to-ask),并提供[最小,完整和可证实的例子](http://stackoverflow.com/help/mcve)。谢谢。哦,顺便说一下:'**'根本没有任何意义。我已经可以告诉你了。你的问题在于这个部分你从我们这里隐藏起来 – kriegaex