java aop性能检测_【Spring】利用AOP来做系统性能监控

需求:

假设已经有了一些类,现在想统计每个方法调用花了多长时间,该怎么做?

思路:

我第一个想法就是去每个方法执行前后记录一下当前的时间戳,然后相减统计到日志。

OK,没问题,那么这样做合理吗?

首先,工作量大且全部都是重复劳动;

其次,扩招性极其差;

再次,不优雅,写代码不仅要考虑到完成需求,一定要以最优雅的形式完成。

所以决定采用spring的面向切面编程技术来辅助完成这项功能。

步骤:

一、首先新建一个ApiMonitor.java:

@Aspectpublic classApiMonitor {

@Pointcut("execution(* com.spring.service.*.*(..))")private voidpointCutMethod() {

}//声明前置通知

@Before("pointCutMethod()")public voiddoBefore() {

System.out.println("前置通知");

}//声明后置通知

@AfterReturning(pointcut = "pointCutMethod()", returning = "result")public voiddoAfterReturning(String result) {

System.out.println("后置通知");

System.out.println("---" + result + "---");

}//声明例外通知

@AfterThrowing(pointcut = "pointCutMethod()", throwing = "e")public voiddoAfterThrowing(Exception e) {

System.out.println("例外通知");

System.out.println(e.getMessage());

}//声明最终通知

@After("pointCutMethod()")public voiddoAfter() {

System.out.println("最终通知");

}//声明环绕通知

@Around("pointCutMethod()")public Object doAround(ProceedingJoinPoint pjp) throwsThrowable {

System.out.println("进入方法---环绕通知");

Object o=pjp.proceed();

System.out.println("退出方法---环绕通知");returno;

}

}

这段代码是copy的,因为觉得写得很典型。

对于本文的需求,应该采用环绕通知@Around这个注解去完成,只要在pjp.proceed()前后分别调用system.currenttimemillis(),然后相减,就OK了。

另外需要注意的是:excution表达式的语法很容易出错,具体如下

bcd8e4f7f5f922c240b14c5e53234c7e.png

二、在applicationcontext.xml中配置aop相关条目

这样就完成了在spring中的IOC装配。

三、别忘了引入aop的依赖

好吧这个应该放在第一点的,没关系,只要在pom.xml中加入:

org.springframework

spring-aop

4.0.5.RELEASE

版本根据你项目使用的spring版本而定,不要随便写一个版本,容易出错,我是踩过坑的,因为4.x版本中比3.x版本多了一些类,因此如果是4.x的aop去调3.x的spring可能会发生类找不到的问题,直接导致项目无法run起来。

切记项目的版本号要统一,避免没必要的坑!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值