使用Spring AOP來統計方法的執行時間

2021-08-06 07:30:10 字數 1829 閱讀 7420

最簡單、粗暴的方法是給各個需要統計的方法開始和結尾處加的時間戳,然後差值計算結果即可,**如下:

[html]view plain

copy

long 

starttime

= system

.currenttimemillis();  

// 業務**  

long endtime

= system

.currenttimemillis();    

這樣的方式需要給很多統計方法都加上耗時時間的**,這些**與核心業務無關卻大量重複、分散在各處,維護起來也困難。

所以,不推薦使用上面的**。利用spring aop的思想來完成這個功能,**和相關的解釋如下:

[html]view plain

copy

import org.apache.commons.logging.log;    

import org.apache.commons.logging.logfactory;    

import org.aspectj.lang.proceedingjoinpoint;    

import org.aspectj.lang.annotation.around;    

import org.aspectj.lang.annotation.aspect;    

import org.aspectj.lang.reflect.methodsignature;    

import org.springframework.stereotype.component;  

/**  

* 檢測方法執行耗時的spring切面類  

* 使用@aspect註解的類,spring將會把它當作乙個特殊的bean(乙個切面),也就是不對這個類本身進行動態**  

* @author blinkfox  

* @date 2016-07-04  

*/  

@aspect  

@component  

public class timeinterceptor  catch (throwable e)   

// 獲取執行的方法名  

long endtime

= system

.currenttimemillis();  

methodsignature signature

= (methodsignature) joinpoint.getsignature();  

string methodname

= signature

.getdeclaringtypename() + "." + signature.getname();  

// 列印耗時的資訊  

this.printexectime(methodname, starttime, endtime);  

return obj;  

}  /**  

* 列印方法執行耗時的資訊,如果超過了一定的時間,才列印  

* @param methodname  

* @param starttime  

* @param endtime  

*/  

private void printexectime(string methodname, long starttime, long endtime)   

}  }  

注意:最後還需要在 

檔案中加上aop需要的配置,這樣spring才能識別到它。

使用Spring AOP新增統計時間的功能

最近有個需求,需要統計各個介面 類的方法的執行時間,但是要盡量不影響原來業務,不改變原有 spring提供了4種實現aop的方式 1.經典的基於 的aop 2.aspectj註解驅動的切面 3.純pojo切面 4.注入式aspectj切面 我這裡講到的是使用 aspectj註解驅動的方式,其他的可以...

Spring AOP 通過order來指定順序

詳見 spring中的事務是通過aop來實現的,當我們自己寫aop攔截的時候,會遇到跟spring的事務aop執行的先後順序問題,比如說動態切換資料來源的問題,如果事務在前,資料來源切換在後,會導致資料來源切換失效,所以就用到了order 排序 這個關鍵字.我們可以通過在 aspectj的方法中實現...

Spring Aop基礎使用

說到spring,想必大家一定就馬上想到了,哦spring不就是幫助管理bean物件,封裝資料源,提供事務管理的東西麼。的確,平常在使用spring的時候,用到最多的就是spring提供的這些功能了,其實spring還有乙個挺好的東西,或許大家平常用得少一些,他就叫aop。什麼aop,這是什麼玩意兒...