Java Spring@Async抽象在异常处理方面存在漏洞
当使用Spring的Java Spring@Async抽象在异常处理方面存在漏洞,java,spring,Java,Spring,当使用Spring的@Async注释时,当方法的抛出子句中出现(已检查)异常时,抽象是泄漏的。编译器将强制调用方处理异常,但实际上调用方永远不会看到@Async方法引发的异常。相反,根据实现的不同,它将由Spring处理和记录,或者提供给用户配置的异常处理程序,或者在对返回值调用Future\get()时生成 因此,我认为@Async方法通常不应该抛出已检查的异常。相反,它们应该将所有选中的异常包装为RuntimeException类型,以便不存在throws子句 这是准确的评估吗?是否有修复泄
@Async
注释时,当方法的抛出
子句中出现(已检查)异常时,抽象是泄漏的。编译器将强制调用方处理异常,但实际上调用方永远不会看到@Async
方法引发的异常。相反,根据实现的不同,它将由Spring处理和记录,或者提供给用户配置的异常处理程序,或者在对返回值调用Future\get()
时生成
因此,我认为@Async
方法通常不应该抛出已检查的异常。相反,它们应该将所有选中的异常包装为RuntimeException
类型,以便不存在throws
子句
这是准确的评估吗?是否有修复泄漏的工具或编程方法?有没有人知道Spring开发人员对此有何看法,或者是否有任何计划来改善这种情况?谢谢
可能相关:您的评估可能是正确的 现在,如果要处理上述异常,只需执行以下操作:
@Async
void mangle() {
try {
doMangle();
} catch (YourCheckedException e) {
// Handle it
}
}
void doMangle() throws YourCheckedException {
...
}
一般来说,Spring更喜欢未经检查的异常(查看Spring数据中的异常转换),异步方法抛出任何异常(这就是为什么
Future
wrapps异常)。当@async'ed方法不返回任何值时,真正的问题就开始了。然后发生了一些有趣的事情;)有什么特别有趣的事情,R4J?