Вопрос «почему использование инверсии управляющего контейнера, такого как Spring, подразумевает, что я должен использовать только непроверенные исключения», немного странный.И я не уверен, что использование IoC подразумевает, что вы должны использовать непроверенные исключения.Checked vs unchecked - это, в конечном итоге, вопрос контекста и мнения.
Мой взгляд на это:
Исключения могут быть отнесены к категориям проверенных и непроверенных исключений.Это просто означает, что некоторые исключения, проверенные, требуют, чтобы мы указали во время компиляции, как приложение будет вести себя в случае возникновения исключения.Непроверенные исключения не требуют от нас обработки времени компиляции.Чтобы создать такие исключения, вы расширяете класс RuntimeException, который является прямым подклассом Exception.Старая и распространенная рекомендация, когда речь идет о проверенном и непроверенном, заключается в том, что исключения времени выполнения используются для оповещения о ситуациях, которые приложение обычно не может предвидеть или восстанавливать, в то время как проверенные исключения - это ситуации, которые хорошо написанное приложение должно ожидать и восстанавливать.
Я сторонник использования только исключений времени выполнения.И если я использую библиотеку, у которой есть метод с проверенным исключением, я создаю метод-обертку, который превращает его в среду выполнения.Почему не проверены исключения тогда?Дядя Боб в своей книге «Чистый код» утверждает, что они нарушают принцип Open / Closed, поскольку изменение подписи с помощью нового объявления throws может иметь последствия на многих уровнях нашей программы, вызывающей метод.
Я написал пост о работе с исключениями, вы можете проверить его, если хотите: https://dzone.com/articles/how-to-deal-with-exceptions