如何使方面检测具有多个注释的方法

时间:2015-02-04 15:09:26

标签: spring-aop spring-aspects

我有一个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"/>

0 个答案:

没有答案