Spring アプリケーションがあり、アスペクトを使用してパフォーマンス ログを実行したいと考えています。
@Measured アノテーションが付けられたメソッドのみをログに記録したいので、次のようにアノテーションを作成しました。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Measured {
boolean logParameters() default true;
boolean logResponse() default true;
boolean measureTime() default true;
}
側面は次のとおりです。
@Aspect
@Component
public class MeasuredAspect {
@Pointcut(value = "@annotation(com.waelawada.web.Measured)")
public void isMeasurableEvent(){
}
@Around(value = "isMeasurableEvent() && @annotation(measured)")
public void addEventToMDC(ProceedingJoinPoint joinPoint, Measured measured) throws Throwable{
String methodName = joinPoint.getSignature().getName();
long startTime = System.currentTimeMillis();
joinPoint.proceed(joinPoint.getArgs());
long endTime = System.currentTimeMillis();
if(measured.measureTime()){
MDC.put(methodName,endTime-startTime);
}
}
}
これは、次のようなメソッドでうまく機能します
@Measured
public boolean getUser() {
}
@RequestMapping で既にアノテーションが付けられている spring mvc コントローラー メソッドにアノテーションを付けたいのですが、apsect はそれを検出していないようです。
@Measured
@RequestMapping(value = "/activity", method = GET)
public final String userProfile(@ModelAttribute(USER) User user,
Model model) {
//Do Something
}
アスペクトにこのメソッドを検出させるにはどうすればよいですか? コンテキストxmlファイルで定義されたSpring aopを次のように使用しています<aop:aspectj-autoproxy proxy-target-class="false"/>