大家好,我是aspectj的新手。在我的程序中,我需要在cunstructor调用中应用切入点,即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
作为回复类型的建议。所以,任何人都可以告诉我我犯了什么错误。在这种情况下我该怎么做。
答案 0 :(得分:2)
错误表示您正在拦截一个不会返回void的函数。
周围的建议不应该返回void,而是从调用中捕获输出并返回。
public Object around(int paramInt, String paramString1):constructorPkt(paramInt, paramString1) && within(com.yepme.*)
{
return proceed(paramInt, paramString1);
}
使用Object,使其适用于匹配的adviced函数(构造函数)可能返回的所有对象类型。