技術共有

SpringAOP の落とし穴

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

ここに画像の説明を挿入します
AOP におけるいくつかの一般的な通知タイプとその基本機能:

  • @Before: 事前通知。ターゲット メソッドが実行される前に実行されます。
  • @After: メソッドの実行結果(例外を含む)に関わらず、対象のメソッドの実行後にポスト通知が実行されます。
  • @AfterReturning: 復帰後の通知。対象メソッドが正常終了した後に実行されますが、メソッドが例外をスローした場合は実行されません。
  • @AfterThrowing: 例外通知。ターゲット メソッドが例外をスローしたときに実行されます。
  • @Around: サラウンド通知では、ターゲット メソッドの実行前後にカスタマイズされた操作を実行でき、ターゲット メソッドの実行を継続するかどうかを決定することもできます。

Spring4とSpring5のAOP実行順序の違い

Spring4 における AOP の実行順序

  • 通常の実行シーケンス:
    1. @Before(事前通知)
    2. ターゲットメソッドの実行
    3. @After(通知後)
    4. @AfterReturning(返却後の通知)
  • 例外実行シーケンス:
    1. @Before(事前通知)
    2. ターゲットメソッドの実行(例外をスロー)
    3. @After(通知後)
    4. @AfterThrowing (例外通知)

サラウンド通知(@Around)が設定されている場合、サラウンド通知の前処理は@Beforeより前に実行され、サラウンド通知の後処理も@After、@AfterReturning、@AfterThrowingより前に実行されます。

Spring5 における AOP の実行順序

Spring 5 では、AOP の実行順序にいくつかの変更が加えられ、主に @AfterReturning と @After の実行順序に反映されています。

  • 通常の実行シーケンス:
    1. @Before(事前通知)
    2. ターゲットメソッドの実行
    3. @AfterReturning(返却後の通知)
    4. @After(通知後)
  • 例外実行シーケンス:
    1. @Before(事前通知)
    2. ターゲットメソッドの実行(例外をスロー)
    3. @AfterThrowing (例外通知)
    4. @After(通知後)

アラウンド通知 (@Around) が構成されている場合でも、アラウンド通知の実行順序は、最初に前処理が実行され、次にターゲット メソッドの実行、次に他の通知 (@AfterReturning、@AfterThrowing、@After)、最後に実行されます。周囲の通知の後処理。