0

例外処理に Spring AOP を使用しています。入力パラメーターをログに記録したいので、アラウンドアドバイスを使用しています。

私のアスペクトメソッドは次のようなものです:

public Object methodName(ProceedingJointPoint pjp){
  Object returnVal = null;
   try{
  returnVal = pjp.proceed();
 } catch(Throable t) {
   // Log exception 

 }
 return returnVal ;

}

現在私が直面している問題は次のとおりです。例外が発生した場合、例外をログに記録したいのですが、null (returnval) を返したくありません。出来ますか?

AOP を使用しない通常のシナリオでは、メソッド内のある行がその行の後に例外をスローすると、他の行は実行されません。そういう振る舞いが欲しい。

どうすればそれを達成できますか?

4

1 に答える 1

2

古き良きチェックされた例外、ただ噛み続けるJavaの設計ミス。

スローアブルを投げ直すだけです:

public Object methodName(ProceedingJointPoint pjp) throws Throwable {

...

 try {
   return pjp.proceed();
 } catch (Throwable t) {
   // so something with t: log, wrap, return default, ...
   log.warn("invocation of " + pjp.getSignature().toLongString() + " failed", t);
   // I hate logging and re-raising, but let's do it for the sake of this example
   throw t;
 }

ここを参照してください:https ://stackoverflow.com/a/5309945/116509

于 2012-04-13T11:48:13.903 に答える