私はAOPにまったく慣れていません。正しいポイントカットを書くためのアドバイスが必要です。すべてのサービス クラスを含むサービス パッケージがあります。すべてのクラスがService
インターフェイスを実装します。このインターフェースにはメソッドがありsave(entity)
ます。service.save(entity)
メソッドが をスローするたびに、私のアドバイスを実行する必要がありDataIntegrityViolationException
ます。
ここで側面:
@Component
@Aspect
public class DIVExceptionHandler {
@AfterThrowing(pointcut = "execution(* myPackage.service.Service.save(*))", throwing = "ex")
public void handleException(JoinPoint joinPoint, DataIntegrityViolationException ex) {
//snipped
}
}
Spring AOPドキュメントで説明されているように、CPに両方のaspectj jarがあり、 Spring構成に追加<aop:aspectj-autoproxy/>
し、コンポーネントスキャンを使用しています。テストのログでは、アスペクトが aspetcj アスペクトとして検出されていることがわかります。
DEBUG o.s.a.a.a.ReflectiveAspectJAdvisorFactory - Found AspectJ method...
したがって、これは構成の問題ではなく、ポイントカット式が間違っていると思います。私も試しました
@AfterThrowing(pointcut = "execution(* myPackage.service.*.save(*))", throwing = "ex")
しかし、それもうまくいきませんでした。
では、正しいポイントカット式は何ですか?