1

Spring Insightで使用する多数のクラスを計測したかったので、 @I​​nsightOperation を手動でメソッドに追加する代わりに、ポイント カットを使用してメソッドにアノテーションを付けるアスペクトを作成しました。

ただし、これは機能していません。手動アノテーションは Spring Insight のトレース ロギングに影響しますが、AspectJ メソッドは機能しません。

ここで間違っていることはありますか?(アスペクト化後にクラスを逆コンパイルし、クラスメソッドで注釈を見つけました)

これはアスペクト コード スニペットです。

declare @method :public * com.example.IExample.execute(..) : @InsightOperation;

4

3 に答える 3

0

InsightLTWが導入された注釈を取得しない可能性があります。それについてもっと深く掘り下げる必要があります。

それまでの間、より低レベルのアノテーションを試すことができます。

   com.springsource.insight.collection.method.MethodOperationsCollected

Spring-Coreプラグインを見ると、次のようなことがわかります。

  public aspect RepositoryMethodOperationCollectionAspect {
      declare @type: @Repository * : @MethodOperationsCollected;
  }
于 2011-05-19T07:58:35.287 に答える
0

Springのドキュメントには次のように書かれています。

@Insight*アノテーションの使用はオプションです。プラグインを作成しなくても、エンドユーザーがカスタム操作フレームとエンドポイントを簡単に定義できるようにします。注釈を使用するにはエンドユーザーコードの変更が必要なため、注釈を記述できない、または記述したくないユーザー向けのオプションです。

http://static.springsource.com/projects/tc-server/2.5/devedition/htmlsingle/devedition.html

したがって、カスタムプラグインを作成するのが唯一の方法のように見えます

http://static.springsource.com/projects/tc-server/2.5/devedition/htmlsingle/devedition.html#tutorial-plugin

于 2011-05-19T07:21:37.953 に答える
0

簡単な回避策は、アスペクト メソッド内から別のメソッドを呼び出して、ジョイン ポイントの実行を続行することです。静的クラスで静的メソッドを呼び出してみただけです。@InsightOperation をすべての JSON シリアライゼーションに追加するための以下のコードを参照してください。

私の側面:

@Aspect
public class JSONSerializerAspect {

@Around("call(* *.JSONSerializer.serialize(..)) && args(target)")
public Object serialize(ProceedingJoinPoint joinPoint, Object target) throws Throwable {
      return JSONSerializationWrapper.serialize(joinPoint, target);
    }
}

呼び出している静的クラス:

public class JSONSerializationWrapper {

    @InsightOperation(label = "JSON_SERIALIZATION")
    public static Object serialize(ProceedingJoinPoint joinPoint, Object target) throws Throwable {
        return joinPoint.proceed(new Object[]{target});
    }

}

私はこれを自分で使用しており、動作することをテストしています。

于 2013-02-07T07:49:31.577 に答える