大家好,我是新来的aspectj。在我的程序中,我需要在构造函数调用上应用切入点,即new Myclass();
。
我有一个点切割,像:
package pak;
//import java.io.PrintWriter;
import java.io.*;
public aspect HookYepmeAspect {
pointcut constructorPkt(int paramInt, String paramString1):
call(public MyClass.new(int , String )) && args( paramInt, paramString1);
void around(int paramInt, String paramString1):constructorPkt(paramInt, paramString1) && within(com.yepme.*)
{
proceed(paramInt, paramString1);
}
}
但是它让我担心:
applying to join point that doesn't return void: constructor-call(void com.yepme.Contact.<init>(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)) HookYepmeAspect.aj /TmpHookAspectProject/src/pak line 63 Java Problem
我还尝试了int
作为返回类型的建议。所以,谁能告诉我,我犯了什么错误。在这种情况下我该怎么做呢?
错误提示你正在拦截一个不返回void的函数。
Around advice不应该返回void,而是捕获调用的输出并返回该输出。
public Object around(int paramInt, String paramString1):constructorPkt(paramInt, paramString1) && within(com.yepme.*)
{
return proceed(paramInt, paramString1);
}
使用Object,这样它将适用于匹配的建议函数(构造函数)可能返回的所有对象类型。