9

Spring AOPの公式ドキュメント(リンク)を読むたびに、RuntimeExceptionsに関するアドバイスの動作に混乱します。誰かが私の理解が次のアドバイスに対して正しいかどうかを確認しますか?

@前

  • アドバイスは例外をスローします=ターゲット(実行されません)アドバイス(実行されます)
  • ターゲットは例外をスローします=ターゲット(実行済み)アドバイス(実行済み)

@AfterReturning

  • アドバイスは例外をスローします=ターゲット(実行済み)アドバイス(実行済み)
  • ターゲットが例外をスローする=ターゲット(実行済み)アドバイス(実行されていない)

@AfterThrowing

  • アドバイスは例外をスローします=ターゲット(実行済み)アドバイス(実行されていません)
  • ターゲットは例外をスローします=ターゲット(実行済み)アドバイス(実行済み)

@後

  • アドバイスは例外をスローします=ターゲット(実行済み)アドバイス(実行済み)
  • ターゲットは例外をスローします=ターゲット(実行済み)アドバイス(実行済み)

@その周り

  • アドバイスは例外をスローします=ターゲット(実行済み)アドバイス(実行済み)
  • ターゲットは例外をスローします=ターゲット(実行済み)アドバイス(point.proceed()まで実行済み)
4

1 に答える 1

11

これは私が通常それを見る方法です。

try {
    //@Before
    method();
    //@AfterReturning
} catch(Throwable t) {
    //@AfterThrowing
} finally {
    //@After
}

@Aroundそれ自身の獣の一種です。ターゲットをいつ呼び出すかを選択するので、ターゲットをキャッチすることができExceptionますthrow。したがって、呼び出しをで簡単にラップして、try-catch-finally前述のすべての参加ポイントにアクセスできます。

「実行済み」とは、「例外がスローされるまで実行された」という意味だと思います。

あなたにとって重要かもしれないもう一つのことは@Order注釈です。値の高いものは@Order最初に前側で発生し、後側で逆方向に機能します。同じターゲットに複数のアドバイスを組み合わせる場合は、このことを念頭に置いてください。

于 2012-09-28T17:42:38.817 に答える