我想知道当使用 param1 时如何调用 doMonitorization 方法(参数定义并在 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("");
}
}
}