我有一个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 definded为<aop:aspectj-autoproxy proxy-target-class="false"/>