首页 > 代码库 > spring3.0框架检测方法运行时间测试(转)
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毫秒
spring3.0框架检测方法运行时间测试(转)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。