1。序文
Spring AOPは紹介しません。オンラインでたくさん検索しました。 Springを使用した人は誰でも、SpringのIOCとAOPを知っています。私たちはしばしばIOCを使用しますが、私たち自身のシステムでは、AOPの使用はほぼゼロです。適用されるこの小さな監視機能を除き、他のものは基本的に使用されません。以下では、エディターは、Spring AOP録音方法を使用して時間を実行するソリューションを整理します。必要に応じて見てみましょう。
2。解決策
1。従来の方法
最も単純でラフな方法は、統計が必要な各方法の最初と最後にタイムスタンプを追加し、違いを計算することです。コードは次のとおりです。
long starttime = system.currenttimemillis(); // business code long endtime = system.currenttimemillis(); system.out.println( "プログラム実行時間:" +(終了時間 - 開始時刻) + "ms"); //出力プログラムの実行時間
この方法では、多くの統計的方法に時間のかかるコードを追加する必要があります。これらのコードはコアビジネスとは何の関係もありませんが、大量に繰り返され、どこにでも散らばっているため、維持が困難になります。
2。接線指向プログラミングの方法
したがって、上記の悪い味覚コードを使用することはお勧めしません。私は長い間それについて考え、Spring AOPのアイデアを使用してこの機能を完了することを計画していました。これ以上苦労することなく、コードと関連する説明は次のとおりです。
Import org.apache.commons.logging.log; Import org.apache.commons.logging.logfactory; Intorg.aspectj.lang.proceedjoinpoint; org.aspectj.lang.annotation.aroundをインポートします。 org.aspectj.lang.annotation.aspectをインポートします。 org.aspectj.lang.reflt.methodsignatureをインポートします。 org.springframework.stereotype.component;/***検出方法の実行のための時間のかかるスプリングファセットクラス* @aspectが注釈したクラスを使用して、Springはそれを特別なBean(セクション)として扱います。 static log logger = logfactory.getlog(timeinterceptor.class); // 1分、つまり、1000msのプライベート静的最終長いone_minute = 1000; //サービスレイヤーの統計時間のかかるセクションは、文字列タイプの最終的なものでなければなりません。注釈で使用する変数は、静的定数型public static string point = "execution(*com.blinkfox.test.service.impl。*。*(..))"; / ** *周囲の通知の周りの統計的方法の時間のかかる実行オブジェクトobj = null; object [] args = joinpoint.getargs(); long starttime = system.currenttimemillis(); try {obj = joinpoint.proceed(args); } catch(throwable e){logger.Error( "実行時の統計エラー時間を消費するサラウンド通知"、e); } //実行方法を取得しますname long endtime = system.currenttimemillis(); Methodsignature Signature =(Methodignature)joinpoint.getSignature(); string methodname = signature.getDeclaringTypename() + "。" + signature.getName(); // time-consuming情報this.printexectime(methodname、starttime、endtime)を印刷します。 OBJを返します。 } /***メソッド実行を印刷する時間のかかる情報を印刷します。特定の時間を超える場合、print * @param methodname * @param starttime * @param endtime */ private void printexectime(string methodname、long starttime、long endtime){long difftime = endtime -starttime; if(difftime> one_minute){logger.warn( "-----" + methodname + "メソッド実行時間:" + difftime + "ms"); }}}注:最後に、 applicationContext.xmlファイルにAOPが<aop:aspectj-autoproxy/>とする構成を追加する必要があります。
要約します
上記は、スプリングAOPを使用して実行時間を記録することです。この記事の内容が、すべての人の勉強や仕事に役立つことを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。