切入点表达式中两个连续的星号是什么意思?
What does two consecutive asterisks in Pointcut expression mean?
我试图定义一个切入点来匹配 class 中的所有方法,但它没有用。
我努力寻找原因。
而我最终找到了我定义的切入点表达式的错误点。
下面是我先定义的开始。 (不起作用)
@Pointcut("execution(** membership.data.MemberRepository.*(..))")
正如我所知,"execution(**" 中连续的两个星号表示任何访问修饰符和任何 return 类型,但它从未匹配某些具有某种 return 类型的方法像这样:
public List<MemberVO> findByName(String name) { ...
另一方面,它匹配了另一个这样的:
public String print(String str) { ...
以下是我发现的正确定义它的方法的开始。这些与上面的两个方法签名匹配并且工作正常。
@Pointcut("execution(public * membership.data.MemberRepository.*(..))")
@Pointcut("execution(* membership.data.MemberRepository.*(..))")
我错过了什么?我努力寻找答案,但它从未出现过。
请让我知道 "execution(** ".
的确切含义
添加:方面的完整来源class
@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);
}
}
}
正如我在评论中所说:**
没有任何意义,您很幸运,解析器似乎将其解释为等同于 *
,但您不能确定。实际上它应该产生一个语法错误。所以请不要使用它,它是没有意义的。您对含义的假设是错误的。 * * blah(..)
也不起作用,它是无效语法。 IMO 它应该在书 "Spring in Action" 中得到修复,我也在那里找到了它。在整个 AspectJ 文档中,您不会找到类似 **
.
的内容
至于你的问题:为了获得 class membership.data.MemberRepository
的所有方法执行,你使用切入点 execution(* membership.data.MemberRepository.*(..))
。你自己已经发现了。
我试图定义一个切入点来匹配 class 中的所有方法,但它没有用。 我努力寻找原因。 而我最终找到了我定义的切入点表达式的错误点。
下面是我先定义的开始。 (不起作用)
@Pointcut("execution(** membership.data.MemberRepository.*(..))")
正如我所知,"execution(**" 中连续的两个星号表示任何访问修饰符和任何 return 类型,但它从未匹配某些具有某种 return 类型的方法像这样:
public List<MemberVO> findByName(String name) { ...
另一方面,它匹配了另一个这样的:
public String print(String str) { ...
以下是我发现的正确定义它的方法的开始。这些与上面的两个方法签名匹配并且工作正常。
@Pointcut("execution(public * membership.data.MemberRepository.*(..))")
@Pointcut("execution(* membership.data.MemberRepository.*(..))")
我错过了什么?我努力寻找答案,但它从未出现过。 请让我知道 "execution(** ".
的确切含义添加:方面的完整来源class
@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);
}
}
}
正如我在评论中所说:**
没有任何意义,您很幸运,解析器似乎将其解释为等同于 *
,但您不能确定。实际上它应该产生一个语法错误。所以请不要使用它,它是没有意义的。您对含义的假设是错误的。 * * blah(..)
也不起作用,它是无效语法。 IMO 它应该在书 "Spring in Action" 中得到修复,我也在那里找到了它。在整个 AspectJ 文档中,您不会找到类似 **
.
至于你的问题:为了获得 class membership.data.MemberRepository
的所有方法执行,你使用切入点 execution(* membership.data.MemberRepository.*(..))
。你自己已经发现了。