2013-05-08 3 views
0

Допустим, у меня есть около ста классов с этой сигнатуры метода, который является единственным способом входа выхода для этого класса:
Как сделать обработку общего Exception

public Map<String,Object> doSome(Map arg1, map arg2) 

и в теле метода есть попытка/catch. Блокировка блокирует исключение и отменяет настраиваемое исключение. Раньше программа просто оставалась в блоке catch. Теперь мне нужно вернуть карту, которая имеет ключевое значение («Исключение», «Некоторые пошли в этом классе плохо»). Один из способов сделать это - сделать дополнительный метод в этом методе doSome (и вставить текущий код в новый) и объединить этот вызов метода с try/catch и в блоке catch поймать настраиваемое исключение и написать общий метод для заполнения возвращаемой карты
Что было бы лучшим способом достичь этого для всех 100 классов?
Мне интересно, можно ли достичь такой цели с помощью Spring AOP? Но большинство весенних советов, с которыми я сталкиваюсь, не позволяют возвращать ценности (это означает, что элемент управления никогда не возвращается к тому месту, откуда было исключено исключение).
Было бы здорово, если бы кто-нибудь мог указать мне на конкретные примеры.

ответ

1

Это звучит как нечто, что можно решить с помощью некоторых функций, предоставляемых родительским классом.

Имейте каждый из ваших 100 классов (действительно, 100 ??!) расширяют абстрактный родительский класс. Есть родительский класс определяет метод doSomething:

public Map<String,Object> doSome(Map arg1, Map arg2) { 

    try { 
    doSomething(arg1, arg2); 
    } catch (Exception e) { 
    // clever handling here 
    } 
} 

Убедитесь, что метод doSomething() определяются как абстрактный метод в ExceptionHandler. Разумеется, лучшие имена методов будут приветствоваться.

Каждый из подклассов будет реализовывать свой собственный вариант doSomething().

+0

немногим более 100. * Действительно *. :) Все эти классы являются частью кодовой базы, которая используется/называется внешней инфраструктурой. Таким образом, эти классы уже расширяют класс этой структуры. Так что это не вариант – happybuddha

+0

@happybuddha Может ли родительский класс не расширять класс фреймворка? –

+0

печально нет. Это существующее приложение (которое неожиданно завершает все в блоке catch), и гибкость таких изменений меньше. – happybuddha

0

Может быть, вы можете попробовать тип Spring AOP «После броска совет - работает после того, как метод генерирует исключение» Вы можете посмотреть на простом примере здесь: http://www.mkyong.com/spring/spring-aop-examples-advice/