最簡單、粗暴的方法是給各個需要統計的方法開始和結尾處加的時間戳,然後差值計算結果即可,**如下:
[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,這是什麼玩意兒...