Java 切入点表达式中两个连续的星号表示什么?

Java 切入点表达式中两个连续的星号表示什么?,java,aop,aspectj,Java,Aop,Aspectj,我试图定义一个切入点来匹配一个类中的所有方法,但它不起作用。 我努力想找出原因。 我最终找到了我定义的切入点表达式的错误点 以下是我首先定义的开始。(不起作用) 正如我所知,“execution(**”中的连续两个星号表示任何访问修饰符和任何返回类型,但它从未匹配过具有以下某种返回类型的某些方法: public List<MemberVO> findByName(String name) { ... 下面是我找到的定义它的正确方法的开始。这些方法匹配上面两个方法签名,并且工作得很好

我试图定义一个切入点来匹配一个类中的所有方法,但它不起作用。 我努力想找出原因。 我最终找到了我定义的切入点表达式的错误点

以下是我首先定义的开始。(不起作用)

正如我所知,“execution(**”中的连续两个星号表示任何访问修饰符和任何返回类型,但它从未匹配过具有以下某种返回类型的某些方法:

public List<MemberVO> findByName(String name) { ...
下面是我找到的定义它的正确方法的开始。这些方法匹配上面两个方法签名,并且工作得很好

@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);
        }
    }
}

正如我在评论中所说:
**
没有任何意义,您很幸运解析器似乎将其解释为等同于
*
,但您不能确定。实际上它应该会产生语法错误。因此请不要使用它,它没有任何意义。您对含义的假设是错误的。
**blah(…)
也不起作用,它是无效的语法。在我看来,它应该在“Spring in Action”一书中得到修复,我在那里也找到了它。在整个AspectJ文档中,你不会找到类似
**
的东西


至于您的问题:为了获得类
membership.data.MemberRepository
的所有方法执行,您使用切入点
execution(*membership.data.MemberRepository.*(…)
。你已经自己发现了。

也许两者之间有一个空格
*
?@Andreas我试图在两者之间留出一个空格,就像这样:“执行(**…)在初始化包含切入点表达式的aspect bean时,它导致了一个异常。为什么不共享完整的切入点和方法签名?这样你将不会得到有意义的答案。请学习并提供一个。谢谢。哦,顺便说一下:
**
没有任何意义。我已经可以告诉你了。哟你的问题在于你对我们隐藏的部分。@kriegaex好的,我明白了。这只是因为我写这个问题时没有源代码,现在我带着我的个人桌面回家了。我添加了我定义的完整切入点表达式和一个方面类。被调用的类名为membership.data.MemberRepository仍然不在这里,因为我t过于冗长,无法在这里写入,并且所需方法的签名已经在这里了,“findByName(String name)”和“print(String name)”。@kriegaex此外,我首先看到了切入点表达式“execution(**..”,它可以与“public void print(Sting name)”配合使用,但与“public List findByName”不配合使用(字符串名称)“在一本书中,题为《行动中的春天》。
@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);
        }
    }
}