如何在 class 中捕获构造函数的名称

How to catch name of constructor in a class

我试图在 class 中捕获构造函数,并且构造函数名称在 aspectj 中被捕获为 "init"。我想打印构造函数名称而不是 "init".

我试图在 class "LeastSquaresSolver_ESTest" 中捕获构造函数调用,并将构造函数名称打印为 "init" 而不是构造函数的实际名称。代码如下。

代码:

pointcut publicMethodExecuted1() :
    execution(org.la4j.linear.LeastSquaresSolver_ESTest.new(..));

before(): publicMethodExecuted1() {
    String value2=thisJoinPoint.getSignature().getName();
    System.out.println(value2);
}

期望值为构造函数名,实际值为init。请在这方面提供帮助。

<init> 只是一个用于表示构造函数的符号名称。实际上构造函数没有像方法这样的名称。当您在 Java 中声明它们时,您使用的是 class 名称。如果这是你想要的,你可以这样得到它:

String fullyQualifiedClassName = thisJoinPoint.getSignature().getDeclaringTypeName();
// org.la4j.linear.LeastSquaresSolver_ESTest

String shortClassName = thisJoinPoint.getSignature().getDeclaringType().getSimpleName();
// LeastSquaresSolver_ESTest

或者只是不要把简单的事情复杂化,直接打印连接点或至少打印签名,然后你就会明白发生了什么:

System.out.println(thisJoinPoint);
// execution(org.la4j.linear.LeastSquaresSolver_ESTest(String, int))

System.out.println(thisJoinPoint.getSignature());
// org.la4j.linear.LeastSquaresSolver_ESTest(String, int)

我总是打印完整的连接点,因为每当我想调试某些东西或更好地了解我的方面的功能时,它都包含我需要的信息。