Я вижу их как дополнительные. Другими словами, это не одно или другое.
Мы разрабатываем с помощью Spring и всех возможностей, которые он предлагает, а затем разворачиваем в контейнер EJB. Однако в большинстве случаев вам не потребуются сессионные компоненты, достаточно сервлетов. В этом преимущество Spring.
При разработке поверх Spring ваше приложение не зависит от какого-либо сервера приложений. Он практически может работать автономно, это означает, что вы можете запускать тесты без контейнера (Spring выполняет транзакцию и управление жизненным циклом за вас).