为什么spring只处理未经检查的异常

Gir*_*ish 8 java spring exception

我想知道为什么spring只处理未经检查的异常.....任何人都可以解释这背后的原因.

Spring正在使用任何设计模式,以避免检查异常?

Abh*_*yak 20

Spring正在使用任何设计模式,以避免检查异常?

不是设计模式,而是异常处理的最佳实践.

考虑以下代码:

public void consumeAndForgetAllExceptions(){
    try {
        ...some code that throws exceptions
    } catch (Exception ex){
        ex.printStacktrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码有什么问题?

抛出异常后,将暂停正常的程序执行,并将控制权转移到catch块.catch块捕获异常并且只是抑制它.在catch块之后继续执行程序,就好像什么都没发生一样.

以下怎么样?

public void someMethod() throws Exception{
}
Run Code Online (Sandbox Code Playgroud)

这种方法是空白的; 它没有任何代码.一个空方法如何抛出异常?Java并不会阻止你这样做.

我想知道为什么spring只处理未经检查的异常?

我个人更喜欢在throws原因中声明的未经检查的异常.当我对它们不感兴趣时​​,我讨厌必须捕获异常.我同意规范需要更多的异常类型,但我不同意它们应该被检查.大多数框架都依赖于未经检查的异常,而不仅仅是Spring框架.

设计API的最佳实践

  • 如果客户端可以采取一些备用操作从异常中恢复,请将其作为已检查的异常.
  • 如果客户端无法执行任何有用的操作,则取消选中异常.有用的,我的意思是采取措施从异常中恢复,而不仅仅是记录异常.

Java的API有许多未检查异常,如 NullPointerException,IllegalArgumentExceptionIllegalStateException.我更喜欢使用Java中提供的标准异常,而不是创建自己的异常.它们使我的代码易于理解,并避免增加代码的内存占用.

也可以看看:

  • 在方法签名中声明未经检查的异常会提高可读性,并且还为工具(如IDE)提供在调用此类方法的代码中建议有用的catch块的机会.这真的只是一种礼貌,但它对呼叫者来说非常有用. (7认同)

Sea*_*dea 5

Spring的中心主题是依赖注入和IOC。受检查的异常会添加不必要的代码并创建更多的依赖项。因此,检查异常的依赖成本大于其收益。它们降低了测试代码的能力。它们导致较低的内聚和较高的耦合。您的代码目标应是高凝聚力和低耦合。Spring专注于SOLID设计原则。