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、测试访问接口
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 接口耗时统计的更多相关文章
- Android Activity启动耗时统计方案
作者:林基宗 Activity的启动速度是很多开发者关心的问题,当页面跳转耗时过长时,App就会给人一种非常笨重的感觉.在遇到某个页面启动过慢的时候,开发的第一直觉一般是onCreate执行速度太慢了 ...
- 给 asp.net core 写个中间件来记录接口耗时
给 asp.net core 写个中间件来记录接口耗时 Intro 写接口的难免会遇到别人说接口比较慢,到底慢多少,一个接口服务器处理究竟花了多长时间,如果能有具体的数字来记录每个接口耗时多少,别人再 ...
- asp.net mvc,基于aop实现的接口访问统计、接口缓存等
其实asp.net 上aop现有的框架应该蛮多的,比如静态注入式的PostSharp(新版本好像已经商业化了,旧版本又不支持.net4.0+),或者通过反射的(性能会降低). 本文则是通过mvc其中一 ...
- springMVC之AOP
AOP(Aspect-Oriented Programming,面向切面编程) 切面(Aepect):横切关注点(跨越应用程序多个模块的功能)被模块化的对象: 通知(Advice):切面必须要完成的工 ...
- awk查看接口耗时情况
+1:LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Ag ...
- GPU和CPU耗时统计方法
GPU端耗时统计 cudaEvent_t start, stop; checkCudaErrors(cudaEventCreate(&start)); checkCudaErrors(cuda ...
- 一则sql优化实现接口耗时降低30倍的优化案例
业务场景: 也测的业务,如上图,通过捕获业务的涉及的接口如下: 查询接口耗时大于7s,已经是非常的慢 经验提示: 一般接口响应时间慢的问题,最简单的方式就是监控接口相关的sql是否存在问题 开启mys ...
- Dropwizard+jersey+MDC实现日志跟踪以及接口响应时间统计
一.实现接口响应时间统计 1.1添加全局请求过滤器并注册 import org.apache.log4j.MDC; import org.slf4j.Logger; import org.slf4j. ...
- java aop做一个接口耗时的计算
看代码: @Aspect @Component public class TimeCostAspect { private static Logger logger = LoggerFactory.g ...
随机推荐
- Android内存泄漏
Java是垃圾回收语言的一种,其优点是开发者无需特意管理内存分配,降低了应用由于局部故障(segmentation fault)导致崩溃,同时防止未释放的内存把堆栈(heap)挤爆的可能,所以写出来的 ...
- Linux文件和目录权限详细讲解
转载请标明出处: http://www.cnblogs.com/why168888/p/5965180.html 本文出自:[Edwin博客园] Linux文件和目录权限解读 如何设置Linxu文件和 ...
- AIDL使用解析
简书本文地址:点击跳转到简书查看 之前面试的时候被问到这个问题,然而当时只有一个大致的印象,随GG,于是我就重新整理的一下.这里大力推荐<Android开发艺术探索>这本书,写的太好了! ...
- Linux(RHEL6.0)下安装GCC
查看系统版本 [root@CP-RHEL proc]# cat /etc/issue Red Hat Enterprise Linux Server release 6.0 (Santiago) Ke ...
- ORACLE 10g 数据库体系结构图
ORACLE 10g 的数据库体系结构图(ORACLE 10g(Release 2)ARCHITECTURE),非常的全面.系统.高屋建瓴的整体介绍了ORACLE 10g 的数据库体系结构.如果能全面 ...
- MS SQL专用管理员连接DAC
在SQL SERVER 2005中,微软引入了一个叫做数据库专用管理员连接方式(DAC Dedicated Administrator Connection)的特性,使用这个新特性,数据库管理员可以在 ...
- 【转】70个经典的 Shell 脚本面试问题
我们为你的面试准备选择了 70 个你可能遇到的 shell 脚面问题及解答.了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务.在过去的几年里,我们注意到所有 ...
- 记录一次MongoDB3.0.6版本wiredtiger与MMAPv1引擎的写入耗时对比
一.MongoDB3.0.x的版本特性(相对于MongoDB2.6及以下): 增加了wiredtiger引擎: 开源的存储引擎: 支持多核CPU.充分利用内存/芯片级别缓存(注:10月14日刚刚发布的 ...
- beautifulSoup(1)
import re from bs4 import BeautifulSoupdoc = ['<html><head><title>Page title</t ...
- linux中的输入从定向和输出重定向
linux的标准的输入和输出为如下 我们在 linux中执行命令时,命令默认输出到console中,很多时候我们需要将命令输出到其他设备上如最常见的就文件中去,或者重文件中输入.那这时候就需要用到li ...