spring3.0框架检测方法运行时间测试(转)

主要利用了Spring AOP 技术,对想要统计的方法进行横切处理,方法执行前开始计时,方法执行后停止计时,得到计时方法就是该方法本次消耗时间。

步骤:

  • 首先编写自己的Interceptor类来实现MethodInterceptor类,来用于切入方法,运行计时代码
  • Spring AOP 的XML配置,配置需要监测的方法和切入方法(自定义的Interceptor)

1、自定义Intercept拦截器

package com.utis.intercept;

import java.util.HashMap;
import java.util.Map;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.lang.time.StopWatch;
/**
 * 方法运行时间测试
 * @author Saiteam
 *
 */
public class MethodTimeActive implements MethodInterceptor {

	/*
	 * 自定义map集合,key:方法名,value:[0,运行次数,1:总时间]
	 */
	public static Map<String, Long[]> methodMap = new HashMap<String, Long[]>(); 

	/*
	 * 拦截要执行的方法
	 */
	public Object invoke(MethodInvocation invocation) throws Throwable {
		System.out.println("MethodTimeActive.invoke()");
		//1、创建一个计时器
		StopWatch watch = new StopWatch();
		//2、计时器开始
		watch.start();
		//3、执行方法
		Object object = invocation.proceed();
		//4、计时器停止
		watch.stop();
		//5、获取方法名称
		String methodName = invocation.getMethod().getName();
		//6、获取耗时多少
		Long time = watch.getTime();
		//7、判断方法执行了多少次,耗时多少
		if(methodMap.containsKey(methodName)){
			Long[] x = methodMap.get(methodName);
			x[0]++;
			x[1] +=time;
		}else{
			methodMap.put(methodName, new Long[]{1L,time});
		}
		return object;
	}

}

2、配置applicationContext.xml文件,利用AOP横向切面编程

	<aop:config>
		<aop:pointcut id="baseServiceMethods" expression="execution(* com.booksys.service.*.*(..))" />
		<aop:advisor advice-ref="methodTimeActive" pointcut-ref="baseServiceMethods" />
	</aop:config>

	<bean id="methodTimeActive" class="com.utis.intercept.MethodTimeActive"></bean>

3、单元测试

package SSITest;

import java.util.Map;
import java.util.Set;
import org.junit.After;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.booksys.service.BookService;
import com.utis.intercept.MethodTimeActive;

public class MethodInterTest {

	ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
	@Test
	public void testMethodTime(){
		BookService bookService = (BookService) context.getBean("bookService");
		System.out.println(bookService.findBookById(1).getBookname());
	}

     //----------------重要的是这个-------------------------
	@After
	public void testMethodActive(){
		Map<String, Long[]> map = MethodTimeActive.methodMap;
		Set<String> set = map.keySet();
		Long[] x = null;
		for(String s : set){
			x = map.get(s);
			System.out.println(s+":"+x[0]+"次,"+x[1]+"毫秒");
		}
	}

}

测试结果:

  MethodTimeActive.invoke()
  11:46:20,912 DEBUG Connection:27 - {conn-100000} Connection
  11:46:20,922 DEBUG Connection:27 - {conn-100000} Preparing Statement:     select * from book where bookid=?   
  java基础教程
  312
  findBookById:1次,312毫秒

时间: 2024-10-30 01:57:02

spring3.0框架检测方法运行时间测试(转)的相关文章

java监测方法运行时间/效率方法

前言: 这周在写一个小项目,虽然小但是是纯调外部接口的,调完了接口还不停的循环接口返回的数据(已转换JSONArray),然后再判断值,再做不同处理,关键是数据量还比较大,这刚做完还没开始上线,测试也还没开始测呢,就想着自己先看看每个方法运行效率,省的数据大了项目挂掉(循环判断好多,有时还有2个for嵌套循环),就是纯粹在时间上进行监测,没有内存和cpu的监控. 主要利用了Spring AOP 技术,对想要统计的方法进行横切处理,方法执行前开始计时,方法执行后停止计时,得到计时方法就是该方法本次

开发基础框架:mybatis-3.2.8 +hibernate4.0+spring3.0+struts2.3

一:项目下载地址(点击 Source code(zip)) https://github.com/fzxblgong/frame_2014-12-15/releases 版本:v1.2大小:20M 二:ssm(mybatis-3.2.8 +hibernate4.0+spring3.0+struts2.3) version v1.3 功能 新增:+8.框架在支持mybatis-3.2.8基础上又整合进hibernate4,并支持注释.+9.使用注释ssh方式实现JqueryMiniUi多选树.实例

三星6.0系统设备最完美激活XPOSED框架的方法

对于喜欢钻研手机的伙伴来说,常常会使用到xposed框架以及种类繁多功能强悍的模块,对于5.0以下的系统版本,只要手机能获得Root权限,安装和激活xposed框架是非常简易的,但随着系统版本的不断升级,5.0以后的系统,激活xposed框架变得非常艰难,有些教程甚至需要我们刷入Recovery的做法来激活,这给我们带来极大的不便,尤其是对我们新手来说,很容易就把手机给刷成木块. 几月前入手一只三星6.0系统设备,网上搜索了较多资料,研究了很久还是不能成功激活xposed框架,因此一直搁在那里没

三星5.0以上系统(亲测有效)激活XPOSED框架的方法

对于喜欢钻研手机的哥们而言,大多时候会玩到xposed框架和各种功能彪悍的模块,对于5.0以下的系统版本,只要手机能获得ROOT权限,安装和激活xposed框架是非常轻松的,但随着系统版本的持续更新,5.0以后的系统,激活xposed框架变得非常烦杂,有些教程甚至需要我们刷入RECOVERY的做法来激活,这给我们带来很大的难度,尤其是对我们屌丝用户而言,很容易就把手机给刷成大砖.几个月之前,购买了一台三星5.0以上系统,网上搜索了许多方法,测试了很久还是没办法成功激活XPOSED框架,所以一直晾

4.0系统XPOSED框架激活方法

XPosed框架基本描述 Xposed框架是基于安卓系统平台的神器,朋友们能通过安装框架对应的框架插件来达到各种神奇的功能以及对系统各种底层的修改. 怎么在Android机器上安装激活XPOSED框架? 朋友们使用XPosed模块的功能之前,必须先在Android系统上安装并激活框架,但在具体不同版本的系统中,XPosed框架版本并不相同,因此朋友们必须选择对应的系统版本框架进行安装和激活,按照系统权限,可以分成root和无root两种不同情况,按照系统版本,可以分成5.0以下.5.0以上.MI

6.0系统手机XPOSED框架激活方法

Xposed框架基本介绍xposed框架是基于Android系统平台的神器,小伙伴们能通过安装框架对应的插件来达到各种神奇的功能以及对系统各种底层的改动.怎么在安卓操作系统上安装激活xposed框架?朋友们使用XPosed模块的功能之前,需要先在android系统上安装并激活框架,但在具体不同版本的系统中,XPosed框架版本并不相同,因而朋友们需要选择对应的系统版本框架进行安装和激活,参照系统权限,可以分为root和无root两种不同情况,参照系统版本,可以分为5.0以下.5.0以上.MIUI

iOS AFNetworking 2.6.0框架导入报错解决方法

最近手动导入AFNetworking 2.6.0框架时发现Xcode报如下3个错误: 1. Use of undeclared identifier ‘kSecFormatUnknown‘ 2. Use of undeclared identifier ‘kSecItemPemArmour‘ 3. Implicit declaration of function ‘SecItemExport‘ is invalid in C99 查询后发现, 解决方法有如下两种: 第一种: 通过CocoaPod

Myeclipse10下搭建SSH框架(图解)Struts2.1+Spring3.0+Hibernate3.3 (转)

出处:http://xly3000.blog.163.com/blog/static/1324247201231163828803/ 一.建立一个Web Project ①点击File→New→Web Project 新建一个Web工程.   ②在Project Name中输入项目名ssh,在J2EE Specification Level中选择Java EE 6.0,然后点击Finish.  二.搭建Spring3.0 ①左边显示的是生成以后的Web Project 目录结构. 选择工程名(s

oppo4.0以上系统怎么样不用ROOT激活XPOSED框架的方法

在很多团队的引流或业务操作中,基本上都需要使用安卓的强大功能XPOSED框架,近来我们团队购来了一批新的oppo4.0以上系统,基本上都都是基于7.0以上版本,基本上都不能够获取root权限,纵然一部分能够但非常麻烦,甚至也有获取root权限后重启设备就恢复无root状态的情况发生,很是忧愁的一件事,导致无能正常激活XPOSED框架,从而很多模块也就无能正常运行.前天刚好看了一下琢石模拟器目前最新软件使用手册,居然发现新版本8.0以上版本可以支持无root设备下使用,手册也提供了对应无root设