如何在 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)
我总是打印完整的连接点,因为每当我想调试某些东西或更好地了解我的方面的功能时,它都包含我需要的信息。
我试图在 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)
我总是打印完整的连接点,因为每当我想调试某些东西或更好地了解我的方面的功能时,它都包含我需要的信息。