SpringAOP の落とし穴
2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

AOP におけるいくつかの一般的な通知タイプとその基本機能:
- @Before: 事前通知。ターゲット メソッドが実行される前に実行されます。
- @After: メソッドの実行結果(例外を含む)に関わらず、対象のメソッドの実行後にポスト通知が実行されます。
- @AfterReturning: 復帰後の通知。対象メソッドが正常終了した後に実行されますが、メソッドが例外をスローした場合は実行されません。
- @AfterThrowing: 例外通知。ターゲット メソッドが例外をスローしたときに実行されます。
- @Around: サラウンド通知では、ターゲット メソッドの実行前後にカスタマイズされた操作を実行でき、ターゲット メソッドの実行を継続するかどうかを決定することもできます。
Spring4とSpring5のAOP実行順序の違い
Spring4 における AOP の実行順序
- 通常の実行シーケンス:
- @Before(事前通知)
- ターゲットメソッドの実行
- @After(通知後)
- @AfterReturning(返却後の通知)
- 例外実行シーケンス:
- @Before(事前通知)
- ターゲットメソッドの実行(例外をスロー)
- @After(通知後)
- @AfterThrowing (例外通知)
サラウンド通知(@Around)が設定されている場合、サラウンド通知の前処理は@Beforeより前に実行され、サラウンド通知の後処理も@After、@AfterReturning、@AfterThrowingより前に実行されます。
Spring5 における AOP の実行順序
Spring 5 では、AOP の実行順序にいくつかの変更が加えられ、主に @AfterReturning と @After の実行順序に反映されています。
- 通常の実行シーケンス:
- @Before(事前通知)
- ターゲットメソッドの実行
- @AfterReturning(返却後の通知)
- @After(通知後)
- 例外実行シーケンス:
- @Before(事前通知)
- ターゲットメソッドの実行(例外をスロー)
- @AfterThrowing (例外通知)
- @After(通知後)
アラウンド通知 (@Around) が構成されている場合でも、アラウンド通知の実行順序は、最初に前処理が実行され、次にターゲット メソッドの実行、次に他の通知 (@AfterReturning、@AfterThrowing、@After)、最後に実行されます。周囲の通知の後処理。