gpt4 book ai didi

java - Spring AOP避免检查异常声明

转载 作者:行者123 更新时间:2023-12-01 22:19:55 32 4
gpt4 key购买 nike

当此方法为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。

最佳答案

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

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

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

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

关于java - Spring AOP避免检查异常声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58599453/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com