以下に示すように、Spring AOP を使用し、すべての DAO メソッドに対して @Around アドバイスを作成することで実行できます。
しかし、catch ブロックで何をしようとしているのかを理解したいと思います。さまざまな種類のデータ アクセス例外を処理するために、さまざまなロジックを用意する予定はありますか? 特定のロジックがない場合は、例外をコントローラー層に伝播させるだけで十分です。
最初のオプション
ここにサンプルがあります -
@Aspect
public class DaoExceptionHandlerAdvice {
@Around("execution( * com.xyz.daos.*.*(..))")
public Object invokeService(ProceedingJoinPoint pjp) throws Throwable{
MethodSignature methodSignature = (MethodSignature)pjp.getSignature();
Object returnValue = null;
try {
returnValue = pjp.proceed();
}
catch(Exception e){
// handle the exception
}
finally{
}
return returnValue;
}
}
アプリケーション コンテキスト ファイルに次のスニペットを追加します。
<aop:aspectj-autoproxy />
<bean id="daoExceptionHandler" class="com.xyz.advice.DaoExceptionHandlerAdvice" ></bean>
詳細については、次のリンクを確認してください -
Spring AOP
2 番目のオプション
私はこれを試したことはありませんが、おそらく例外トランスレーターを使用する方が簡単でしょう。おそらく HibernateExceptionTranslator を拡張して、そこに独自のロジックを含めることができます。
詳細については、このリンクをたどってください -
例外翻訳