假設已經有了一些類,現在想統計每個方法呼叫花了多長時間,該怎麼做?
我第乙個想法就是去每個方法執行前後記錄一下當前的時間戳,然後相減統計到日誌。
ok,沒問題,那麼這樣做合理嗎?
首先,工作量大且全部都是重複勞動;
其次,擴招性極其差;
再次,不優雅,寫**不僅要考慮到完成需求,一定要以最優雅的形式完成。
所以決定採用spring的面向切面程式設計技術來輔助完成這項功能。
@aspect這段**是copy的,因為覺得寫得很典型。public
class
apimonitor
//宣告前置通知
@before("pointcutmethod()")
public
void
dobefore()
//宣告後置通知
@afterreturning(pointcut = "pointcutmethod()", returning = "result")
public
void
doafterreturning(string result)
//宣告例外通知
@afterthrowing(pointcut = "pointcutmethod()", throwing = "e")
public
void
doafterthrowing(exception e)
//宣告最終通知
@after("pointcutmethod()")
public
void
doafter()
//宣告環繞通知
@around("pointcutmethod()")
public object doaround(proceedingjoinpoint pjp) throws
throwable
}
對於本文的需求,應該採用環繞通知@around這個註解去完成,只要在pjp.proceed()前後分別呼叫system.currenttimemillis(),然後相減,就ok了。
另外需要注意的是:excution表示式的語法很容易出錯,具體如下
這樣就完成了在spring中的ioc裝配。
好吧這個應該放在第一點的,沒關係,只要在pom.xml中加入:
org.springframework版本根據你專案使用的spring版本而定,不要隨便寫乙個版本,容易出錯,我是踩過坑的,因為4.x版本中比3.x版本多了一些類,因此如果是4.x的aop去調3.x的spring可能會發生類找不到的問題,直接導致專案無法run起來。spring-aop
4.0.5.release
切記專案的版本號要統一,避免沒必要的坑!
利用sessionStorage來做頁面之間的通訊
上篇剛說了下localstorage怎麼在兩個不同的頁面之間做通訊以及他們通訊成功的幾個條件,今天就順便講下sessionstorage是怎麼做的。sessionstosrage 這個語法跟localstorage是一樣的,如下 儲存資料到 sessionstorage sessionstorage...
spring使用AOP做實現操作記錄的功能
首先定義乙個註解 target retention retentionpolicy.runtime documented inherited public inte ce logannotation 寫乙個aop類 該註解標示該類為切面類 aspect 注入依賴 component public c...
利用C Winform做Windows系統工作列
最近公司做乙個考試系統,需要乙個答題欄,要求 占用螢幕上方一部分區域,而且始終置頂,當其他視窗最大化時 答題欄 始終置前並且不遮擋最大化視窗的任何部分!就像windows工作列一樣。最終效果圖如下 首先,我們必須宣告所需的結構和常量。我們宣告rect winapi結構如下 structlayout ...