1

LoggingAspect クラスに以下のコードがあり、これが次のようなメソッドに対して実行されることを期待しています

gov.ssa.rome.service.impl.save() gov.ssa.rome.dao.impl.save()

しかし、何があっても一度だけ実行されます。どうしてか分かりません。autowire を使用して dao をサービス層に配線しました。本当にありがとうございました。

このメソッドをすべてのアプリケーション フローに対して実行して、フローをログに表示するにはどうすればよいですか?

@Around("execution(* gov.ssa.rome..*.*(..))")
public Object log(ProceedingJoinPoint pjp) throws Throwable {

 System.out.println("aspect Around started");

        Object ret = pjp.proceed();

    System.out.println("aspect Around ended);

  return ret;
}
4

1 に答える 1

2

アスペクトは、さまざまなテクノロジーを使用して作成できます。JDK プロキシの場合、インターフェイスで定義されたメソッドに対してのみ機能します。それらが cglib プロキシである場合、final メソッドを除くすべてのメソッドで機能します。一致するクラスがインターフェースを実装し、それ以外の場合は cglib プロキシを実装する場合、Spring はデフォルトで JDK プロキシを使用すると思います。

save メソッドを使用したクラスがどのように見えるか、および save がインターフェイスから来ているかどうかを確認してください。すべてを機能させるために、aspectjweaver プロキシを強制できますが、バイトコードの操作が必要です。JDK プロキシに固執し、必要に応じてインターフェイスを作成/拡張することをお勧めします。詳細については、Spring のドキュメント AOP の章を参照してください。

于 2010-07-30T09:08:02.200 に答える