2011-06-16 8 views
0

態様は、以下の例に示すように、メソッド呼び出し、 の性能を測定するために使用することができる。AspectJの - ダウト

public aspect MonitorRequests { 
    void around() : monitoredRequestO { 
    PerfStats stats = getPerfStats(thisDoinPointStaticPart); 
    long start = System-currentTimeMillisO; 
    proceedO; 
    stats.ecunter++; 
    stats.time += System.currentTimeMillisC)-start; 
    } 
    pointcut monitoredRequestO : 
    execution(void HttpServ1et.do*(..)) && if(enabled); 
    // can expose stats via JMX, dump method, getstats etc. 
    public static class PerfStats { _. } 
    private Map<StaticPart,PerfStats> perfStatMap • //... 
    private boolean enabled; 
} 

デフォルトでは、アスペクトインスタンスはむしろで、Java仮想マシンに関連付けられています 特定の実行フロー。静的クラスに似ています。

public aspect MonitorDatabaseRequests 
    percflow(monitoredRequest() && !cflowbelow(mon-5toredRequest()) { 
    void around() : monitoredRequestO { 
    PerfStats stats = getPerfStats(thisJoinPointStaticPart); 
    long time.= System.currentTimeMi 11 i s O ; 
    proceed(); 
    stats.counter++; 
    stats.databaseTime += accumulatedoatabaseTime; 
    stats.time 4= System.currentTimeMi 11 isO-time; 
    } 
} 

percflow()の宣言を追加すると、私はどのようにpercflow作品を混乱している

この例では作るの違いは何ですか: 別の態様は、以下の は異なるデフォルトのアスペクトインスタンスを関連付けるためにpercflow()を使用していますこれを使用しない場合とはどう違うのですか?

+0

少し時間をかけてコードを整理してください。以前は読むことができませんでした。私は今回はそれを修正した。 –

答えて

0

percflowは、インスタンス化モデルです。参照: http://eclipse.org/aspectj/doc/released/progguide/quick-aspectAssociations.html

これは、このアスペクトの1つのインスタンスが、入力されたすべてのcflowに対して作成されることを意味します。

第1の側面はシングルトンであるため、トラッキングするすべてのパフォーマンス統計のマップを格納する必要があります。 2番目の側面は必要に応じてインスタンス化されるため、パフォーマンス統計は暗黙的に格納され、適切な動的コールグラフに関連付けられます。