Spring AOP避免检查异常声明

问题描述 投票:0回答:1

当此方法为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进行处理吗?

对我来说,唯一的破解是Lombok的SneakyThrows,但这并不是我所相信的最好的,因为我仍然需要在注释中声明Exception。

java spring-aop checked-exceptions
1个回答
0
投票

readCounter()抛出MyEx的原因是什么?是因为该类正在实现接口,还是因为其中的代码引发了异常?

如果实现接口,则该方法不能在合同中引发异常。

如果异常是由代码逻辑引发的,则可以在try-catch块中进行处理。

在两种情况下,都可以将代码中的检查后异常包装到运行时异常中并抛出。这应该在建议中处理。

© www.soinside.com 2019 - 2024. All rights reserved.