在接口开发中,我们通常需要统计接口耗时,为后续接口性能做统计。在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、测试访问接口

  aaarticlea/png;base64,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" alt="" />

  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:环绕执行

springMVC Aspect AOP 接口耗时统计的更多相关文章

  1. Android Activity启动耗时统计方案

    作者:林基宗 Activity的启动速度是很多开发者关心的问题,当页面跳转耗时过长时,App就会给人一种非常笨重的感觉.在遇到某个页面启动过慢的时候,开发的第一直觉一般是onCreate执行速度太慢了 ...

  2. 给 asp.net core 写个中间件来记录接口耗时

    给 asp.net core 写个中间件来记录接口耗时 Intro 写接口的难免会遇到别人说接口比较慢,到底慢多少,一个接口服务器处理究竟花了多长时间,如果能有具体的数字来记录每个接口耗时多少,别人再 ...

  3. asp.net mvc,基于aop实现的接口访问统计、接口缓存等

    其实asp.net 上aop现有的框架应该蛮多的,比如静态注入式的PostSharp(新版本好像已经商业化了,旧版本又不支持.net4.0+),或者通过反射的(性能会降低). 本文则是通过mvc其中一 ...

  4. springMVC之AOP

    AOP(Aspect-Oriented Programming,面向切面编程) 切面(Aepect):横切关注点(跨越应用程序多个模块的功能)被模块化的对象: 通知(Advice):切面必须要完成的工 ...

  5. awk查看接口耗时情况

    +1:LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Ag ...

  6. GPU和CPU耗时统计方法

    GPU端耗时统计 cudaEvent_t start, stop; checkCudaErrors(cudaEventCreate(&start)); checkCudaErrors(cuda ...

  7. 一则sql优化实现接口耗时降低30倍的优化案例

    业务场景: 也测的业务,如上图,通过捕获业务的涉及的接口如下: 查询接口耗时大于7s,已经是非常的慢 经验提示: 一般接口响应时间慢的问题,最简单的方式就是监控接口相关的sql是否存在问题 开启mys ...

  8. Dropwizard+jersey+MDC实现日志跟踪以及接口响应时间统计

    一.实现接口响应时间统计 1.1添加全局请求过滤器并注册 import org.apache.log4j.MDC; import org.slf4j.Logger; import org.slf4j. ...

  9. java aop做一个接口耗时的计算

    看代码: @Aspect @Component public class TimeCostAspect { private static Logger logger = LoggerFactory.g ...

随机推荐

  1. Android内存泄漏

    Java是垃圾回收语言的一种,其优点是开发者无需特意管理内存分配,降低了应用由于局部故障(segmentation fault)导致崩溃,同时防止未释放的内存把堆栈(heap)挤爆的可能,所以写出来的 ...

  2. Linux文件和目录权限详细讲解

    转载请标明出处: http://www.cnblogs.com/why168888/p/5965180.html 本文出自:[Edwin博客园] Linux文件和目录权限解读 如何设置Linxu文件和 ...

  3. AIDL使用解析

    简书本文地址:点击跳转到简书查看 之前面试的时候被问到这个问题,然而当时只有一个大致的印象,随GG,于是我就重新整理的一下.这里大力推荐<Android开发艺术探索>这本书,写的太好了! ...

  4. Linux(RHEL6.0)下安装GCC

    查看系统版本 [root@CP-RHEL proc]# cat /etc/issue Red Hat Enterprise Linux Server release 6.0 (Santiago) Ke ...

  5. ORACLE 10g 数据库体系结构图

    ORACLE 10g 的数据库体系结构图(ORACLE 10g(Release 2)ARCHITECTURE),非常的全面.系统.高屋建瓴的整体介绍了ORACLE 10g 的数据库体系结构.如果能全面 ...

  6. MS SQL专用管理员连接DAC

    在SQL SERVER 2005中,微软引入了一个叫做数据库专用管理员连接方式(DAC Dedicated Administrator Connection)的特性,使用这个新特性,数据库管理员可以在 ...

  7. 【转】70个经典的 Shell 脚本面试问题

    我们为你的面试准备选择了 70 个你可能遇到的 shell 脚面问题及解答.了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务.在过去的几年里,我们注意到所有 ...

  8. 记录一次MongoDB3.0.6版本wiredtiger与MMAPv1引擎的写入耗时对比

    一.MongoDB3.0.x的版本特性(相对于MongoDB2.6及以下): 增加了wiredtiger引擎: 开源的存储引擎: 支持多核CPU.充分利用内存/芯片级别缓存(注:10月14日刚刚发布的 ...

  9. beautifulSoup(1)

    import re from bs4 import BeautifulSoupdoc = ['<html><head><title>Page title</t ...

  10. linux中的输入从定向和输出重定向

    linux的标准的输入和输出为如下 我们在 linux中执行命令时,命令默认输出到console中,很多时候我们需要将命令输出到其他设备上如最常见的就文件中去,或者重文件中输入.那这时候就需要用到li ...