Хорошая вещь швейцарский нож. Например, такой. И нож, и открывалка, и штопор - всё, что нужно для вылазки. Постойте, а точно всё? А как же вилка? Возить отдельно? Давайте добавим вилку. А чем суп есть? Тогда и ложку надо. А если ноготь сломается? Нужны пилка и маникюрные ножницы. А если... Ну, вы поняли . И вот уже наш нож выглядит как-то так. Вам всё ещё удобно им пользоваться? Да и "нож" ли это? С тем же успехом можно именовать "ножом" ящик с инструментами. Но по бумагам всё ещё проходит, как нож... А, значит, весь ремонт должен сводиться к аккуратной заточке на точильном камне, а не к услугам часовщика/ювелира, ведь так?..
Spring, по моему мнению, это тот же швейцарский нож только для Java приложений. Он уже давно перестал быть чисто библиотекой для DI, превратившись в вещь в себе, которая умеет всё (и в безопасность, и в БД, и в UI, и в веб), проникает везде, и контролирует всё. Фактически, он стал God Object вашего приложения - вы ничего не можете сделать в использующем Spring приложении, не учитывая его многочисленные конфигурации и не используя классы из его встроенных библиотек или даже из third part библиотек его библиотек.
А в чём проблема любого God Object'а? Правильно, избыточная сложность и немодифицируемость. Хотите познать приступы отчаяния и боли)? Обновите в вашем приложении версию Spring'а (они ведь регулярно новые выходят, а старый код перестаёт поддерживаться). Это просто очаровательно, особенно, когда мигрируешь, скажем, с третьего Спринга на пятый - приложение ломается самым неожиданным образом в самых неожиданных местах от коннектов к БД и до js-кода на фронте (я серьёзно).