springMVC Aspect AOP 接口耗时统计

  在接口开发中,我们通常需要统计接口耗时,为后续接口性能做统计。在springMVC中可以用它的aop来记录日志。

  1、在spring配置文件中开启AOP

    <!--*************** 支持aop **************** -->
    <aop:aspectj-autoproxy proxy-target-class="true" />

  2、编写AOP

package com.parry.demo.aop;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * <p>
 * PerformanceInterceptor 性能统计接口:接口耗时统计
 * <p>*/
@Aspect
@Component
public class PerformanceInterceptor {

    private Logger log = Logger.getLogger(PerformanceInterceptor.class);
    
    //我需要监控所有controlller的耗时(controller放在包com.parry.demo.controller下面)
    @Around("execution(* com.parry.demo.controller.*.*(..))") 
    public Object logTome(ProceedingJoinPoint pjp) throws Throwable {
        long begin = System.currentTimeMillis();
        String method = pjp.getSignature().getName();
        String className = pjp.getTarget().getClass().getName();

        Object ret = pjp.proceed();
        log.info("func<doAround> method<" + className + "." + method + "> cost time <"
                + (System.currentTimeMillis() - begin) + ">ms");
        return ret;
    }
}

  3、测试访问接口

  

  4、关于AOP的一些说明

  (1)一些常见的切入点

  • execution(public * * (. .))    任意公共方法被执行时,执行切入点函数
  • execution( * set* (. .))   任何以一个“set”开始的方法被执行时,执行切入点函数
  • execution( * com.demo.service.AccountService.* (. .))  当接口AccountService 中的任意方法被执行时,执行切入点函数
  • execution( * com.demo.service.*.* (. .))  当service 包中的任意方法被执行时,执行切入点函数
  • within(com.demo.service.*)  在service 包里的任意连接点
  • within(com.demo.service. .*)  在service 包或子包的任意连接点
  • this(com.demo.service.AccountService) 实现了AccountService 接口的代理对象的任意连接点
  • target(com.demo.service.AccountService) 实现了AccountService 接口的目标对象的任意连接点
  • args(Java.io.Serializable)  任何一个只接受一个参数,且在运行时传入参数实现了 Serializable 接口的连接点

  (2)AOP多样的方法

  • @Before:方法前执行
  • @AfterReturning:运行方法后执行
  • @AfterThrowing:Throw后执行
  • @After:无论方法以何种方式结束,都会执行(类似于finally)
  • @Around:环绕执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值