2012-04-13 3 views
0

Я использую Spring AOP для обработки исключений. Я использую совет, поскольку я хочу регистрировать входные параметры.Не возвращайте значение после исключения исключения при использовании Spring AOP

Мой метод аспект таков:

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

} 
return returnVal ; 

} 

Проблема в настоящее время я столкнулся: когда исключение произошло, я хочу войти исключение, но я не хочу, чтобы вернуть нуль (ReturnVal). Является ли это возможным?

В обычном сценарии без АОП: когда какая-то строка в методе генерирует исключение после этой строки, никакие другие строки не выполняются. Я хочу такое поведение.

Как мы можем это сделать?

ответ

2

Хорошо старые проверенные исключения, ошибка дизайна Java, которая просто продолжает кусаться.

Просто повторно бросит 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; 
} 

Смотрите здесь: https://stackoverflow.com/a/5309945/116509

+0

Есть ли способ, чтобы избежать возвращения без Повторное выбрасывание? –

+0

Посмотрите на это так: если бы у вас не было аспект здесь, код бы исключил. Ваш аспект не должен изменять это поведение. – artbristol

+0

Нет теоретического метода, когда метод с объявленным возвращаемым значением может нормально завершиться без возврата значения. Представьте себе, как бы выглядела линия кода, которая называла ваш аспект. –

Смежные вопросы