我想知道如何在使用param1时调用doMonitorization方法(param在TestClassGeneralMeasuraments类的方法上定义并使用),该方法具有正确的注释,具有拦截AspectJ定义,如下面的代码所示。
package monitorization;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class AspectJInterceptor {
@Pointcut(value = "@annotation(monitorme)", argNames = "monitorme")
public void monitorActivity(Monitorme monitorme) {}
@After("monitorActivity(monitorme)")
public void doMonitorization(JoinPoint jp, Monitorme monitorme) {
MetricsDataStructure.staticInstance.addOperation(jp.getSignature().toLongString(), monitorme.value());
}
}
/////////////////////////////////////////////// //
package monitorization;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface Monitorme {
int value();
}
/////////////////////////////////////////////// //
package monitorization;
public class TestClassGeneralMeasuraments{
@Monitorme(20)
int field;
@Monitorme(50)
int field2;
@Monitorme(5)
public void simpleTestMethod(@Monitorme(10) String param1){
this.field = 1;
this.field = 3;
this.field = 4;
param1 = "";
}
@Monitorme(30)
public void simpleTestMethod2(@Monitorme(10) String param1){
this.field2 = 1;
this.field2 = 1;
param1 = "";
}
public static void main(final String[] args){
long intialTimeStamp = System.currentTimeMillis();
System.out.println("Starting up");
TestClassGeneralMeasuraments testObject = new TestClassGeneralMeasuraments();
for(long i=0; i<50; i++)
{
testObject.simpleTestMethod("Hey");
testObject.simpleTestMethod("Hey");
testObject.simpleTestMethod2("");
}
}
}
答案 0 :(得分:2)
AspectJ @annotation
切入点无法匹配参数上的注释,只能匹配参数类型,即无法匹配
public foo(@MyAnnotation MyType foo)
但你只能匹配
public foo(MyType foo)
如果MyType
注释了课程@MyAnnotation
。
这已在AspectJ邮件列表中进行了讨论,并且是目前尚未实施的愿望清单上的一项功能。