Spring AOP избегает проверки объявления исключений - PullRequest
0 голосов
/ 29 октября 2019

Можно ли избежать объявления проверенного исключения в сигнатуре метода, когда этот метод равен aspect-wrapped. У меня есть следующее:

Пользовательское исключение, которое Я не могу изменить (при условии)

class MyEx extends Exception {
...
}

метод, который вызывает исключение:

public MyObject readCounter() throws MyEx {
                              ^^^^^^^^^^^^
                           // Would like to avoid declaring this
 ...
}

этот метод упакован с аспектом AOP Spring:

@Around("execution(* com.mypackage.myService.*(..))" +
            " && @annotation(com.mypakage.service.annotation.AspectWrapped) && args(args)")
public Object aroundServiceCallMethod(ProceedingJoinPoint point, Object args) throws SomeAnotherException {
        try {
            Object result = point.proceed();
        } catch (Throwable e) {
            // Ignore
        }
        return null;
    }

Как видите, метод readCounter никогда не сгенерирует MyEx проверенное исключение, потому что аспект aroundServiceCallMethod здесь подавляет все исключения.

Могу ли я сделать что-нибудь с методом readCounter или аспектным методом aroundServiceCallMethod, чтобы избежать объявления throws MyEx в сигнатуре метода?

Единственный хак для меня - это Ломбок SneakyThrows но я считаю, что это не лучшее, потому что мне все еще нужно объявить об исключении, но в аннотации.

1 Ответ

0 голосов
/ 30 октября 2019

По какой причине readCounter () выбрасывает MyEx? Это потому, что класс реализует интерфейс или исключение возникает из кода внутри?

При реализации интерфейса метод не может вызвать исключение в контракте.

Если исключениевозникает из логики кода, которая может быть обработана в блоке try - catch.

В обоих случаях можно включить проверенное исключение из кода в исключение времени выполнения и выбросить. Это должно быть учтено в совете.

...