Spring широко использует RuntimeExceptions (включая использование DataAccessExceptions для обертывания SQLExceptions или исключений из ORM) для случаев, когда восстановление не происходит после исключения.Предполагается, что вы хотите использовать проверенные исключения для случаев, когда слой выше службы должен быть уведомлен о чем-то, но вы не хотите, чтобы транзакция вмешивалась.
Если вы используете Spring, вы также можете использовать его библиотеки jdbc-wrapping и DataAccessException-средство перевода, это сократит объем кода, который вы должны поддерживать, и предоставит более значимые исключения.Также плохой запах имеет наличие сервисного уровня, выдающего специфические для реализации исключения.Пред-Spring способ заключался в создании проверенных исключений, не зависящих от реализации, обертывающих специфичные для реализации исключения, что приводило к большой загруженности работой и раздутой базе кода.Путь Spring избегает этих проблем.
Если вы хотите знать, почему Spring решил заставить все работать таким образом, возможно, потому, что они используют AOP для добавления обработки транзакций.Они не могут изменить сигнатуру метода, который они упаковывают, поэтому проверенные исключения не являются опцией.