我尝试定义一个与一个类中的所有方法匹配的切入点,但它不起作用。 我努力找出原因。 我最终找到了我定义的切入点表达式的错误点。
以下是我首先定义的开头。 (不起作用)
@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);
}
}
}
答案 0 :(得分:0)
正如我在评论中所说:**
并不意味着什么,你很幸运,解析器似乎将它解释为等同于*
,但你不能确定。实际上它应该产生语法错误。所以请不要使用它,这是没有意义的。你对意义的假设是错误的。 * * blah(..)
也不起作用,它是无效的语法。 IMO应该在“Spring in Action”一书中修复,我也在那里找到了它。在整个AspectJ文档中,您将找不到类似**
。
至于你的问题:为了获得类membership.data.MemberRepository
的所有方法执行,你使用切入点execution(* membership.data.MemberRepository.*(..))
。你已经发现了自己。