利用AOP實現對方法執行時間的統計

2021-09-21 19:17:11 字數 1911 閱讀 8702

由於專案主管提出統計每個方法執行的具體時間,列印到日誌以後方便分析問題。這個也是很常用的辦法,但是我們呼叫的外部模組非常多,每個地方都加上乙個時間統計就顯得非常難看了。所以這個事情當然還是交給spring的aop功能**掉,就算那天不想統計時間了,清除這個功能也異常容易。下面給出乙個小例子,非常的簡單。

首先,給出乙個mouse的物件,他有幾個基本的動作,我們就統計這些動作的具體執行時間。

package

log; 

public

class

mouse  

public

void

move() catch

(interruptedexception e)  

} } 

然後編寫乙個對於時間統計的類作為aspect。

package

log; 

import

org.apache.log4j.logger; 

import

org.aspectj.lang.proceedingjoinpoint; 

public

class

logaspect finally

return

result; 

}

}

最關鍵的就是在配置檔案宣告橫切面和具體執行類,注意這個bean必須在spring容器裡面才行。

<?

xmlversion

="1.0"

encoding

="utf-8"

?>

<

beans

xmlns

=""xmlns:xsi

=""xmlns:aop

=""xsi:schemalocation

="     

/spring-beans-2.5.xsd 

/spring-aop-2.5.xsd">

<

beanid=

"logaspect"

class

="log.logaspect"

/>

<

beanid=

"mouse"

class

="log.mouse"

/>

<

aop:config

>

<

aop:pointcutid=

"logpointcut"

expression

="execution( * log.mouse.*(..))"

/>

<

aop:aspect

ref=

"logaspect"

>

<

aop:around

pointcut-ref

="logpointcut"

method

="invoke"

/>

aop:aspect

>

aop:config

>

beans

>

最後給出執行的測試類

package

log; 

import

import

public

class

logtest  

} 這裡再提下asm,這個橫切進入的實現就是依靠asm的動態生成中間位元組碼,在生成位元組碼的動作中把具體的實現混入進去了。不得不讚嘆一下~!

C 控制方法執行時間

1.最近在專案中有個讀取檔案的方法,如果檔案過大,這個方法會長時間卡住,影響程式的執行。於是研究了一下控制方法的執行時間,如果超過某個時間,則跳出該方法的執行。demo 1 private static void main string args 2,函式執行時間 s ret,datetime.no...

測試程式執行時間的方法

程式的效能好壞是由其執行時間和空間占用情況決定的,而執行時間是主要的指標。因此設計出新的演算法時,根據時間複雜度確定新的演算法和傳統演算法的優劣,此時需要在程式中新增 段,測試程式執行時間。這裡介紹兩種測試程式執行時間的方法。法1 include include include int main e...

java如何記錄方法執行時間?

當我們寫完一些東西的時候,執行有可能很慢卻不知道 出現了問題,這時候我們就需要在 中新增適當的測試 以便於我們找到原因並解決!這個 是測試 嗎,不需要匯入包。在你需要測試的 方法第一行加上 long a system.currenttimemillis 在最後的一行加上 system.out.pri...