2012-04-13 8 views
0

Ich verwende Spring AOP für die Ausnahmebehandlung. Ich verwende um Rat, da ich die Eingabeparameter protokollieren möchte.Rückgabewert nicht nach Abfangen der Ausnahme bei Verwendung von Spring AOP

Mein Aspekt Methode ist wie folgt:

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

} 
return returnVal ; 

} 

Das Problem derzeit Ich bin vor ist: Wenn die Ausnahme aufgetreten ist, möchte ich die Ausnahme einzuloggen, aber ich will nicht null (returnval) zurückzukehren. Ist es möglich?

Im normalen Szenario ohne AOP: Wenn eine Zeile in der Methode eine Exception nach dieser Zeile auslöst, werden keine anderen Zeilen ausgeführt. Ich will ein solches Verhalten.

Wie können wir es erreichen?

Antwort

2

Gute altgeprüfte Ausnahmen, der Java-Designfehler, der einfach weiterbeißt.

rethrow einfach die throwable:

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; 
} 

Siehe hier: https://stackoverflow.com/a/5309945/116509

+0

Gibt es eine Möglichkeit der Rückkehr zu vermeiden, ohne Erneutes Auslösen? –

+0

Schau es dir so an: Hättest du hier keinen Aspekt gehabt, hätte der Code eine Ausnahme ausgelöst. Dein Aspekt sollte dieses Verhalten nicht ändern. – artbristol

+0

Es gibt keinen theoretischen Weg, wie eine Methode mit einem deklarierten Rückgabewert normal beendet werden könnte, ohne einen Wert zurückzugeben. Stellen Sie sich vor, wie die Codezeile aussieht, die Ihren Aspekt anspricht. –